2016-03-22 15 views
0

Bir uygulamanın pencere boyutunu elde edebilmek ve bir uygulamadaki diğer modüllere aktarmayı ve pencere boyutu güncellendiğinde (Bir kullanıcı pencereyi yeniden boyutlandırırsa, güncelleştirilmiş pencere boyutu da diğer modüllere geçirilir. Örneğin, self.size içinde pencere boyutunu depolamaya çalıştığım aşağıdaki kod gibi bir şeyi denedim, böylece foo() içinde kullanılabilir. Ancak, bu kod bana 'TestPanel' object has no attribute 'size diyerek bir hata mesajı verir. Yapmak istediklerimi yapmanın bir yolu var mı diye merak ediyorum.wxPython: Pencere boyutu gerçek zamanlı olarak yeniden boyutlandırılırken pencere boyutu nasıl güncellenir

import wx 
class TestPanel(wx.Panel): 

    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, -1) 
     self.Bind(wx.EVT_SIZE, self.OnSize, self) 
     self.foo() 

    def Resize(self): 
     self.size = self.GetSize() 

    def OnSize(self, event): 
     self.Resize() 

    def foo(self): 
     print(self.size) 

if __name__ == '__main__': 
    app = wx.App(False) 
    f = wx.Frame(None, -1) 
    TestPanel(f) 
    f.Show() 
    app.MainLoop() 

cevap

1

Önce bu hata iletisini size neyin verdiğini bulmanız gerekir. Kodunuzda olduğu gibi, __init__ yönteminde, foo öğesinin çağrılmadan önce size özniteliğinin herhangi bir yere ayarlanmadığını anlayın.

Yapmak istediğiniz şey, EVT_SIZE numaralı ileti için foo numaralı çağrıyı geciktirmek, bu durumda OnSize. Pencere varsayılan boyutuna yeniden boyutlandırılacağı zaman görünür hale gelecektir (böylece self.size ayarlanarak). Daha sonra yapmak istediğini basitleştirmek olabilir:

class TestPanel(wx.Panel): 

    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, -1) 
     self.Bind(wx.EVT_SIZE, self.OnSize, self) 

    def OnSize(self, event): 
     self.size = self.GetSize() 
     self.foo() 

    def foo(self): 
     print(self.size) 

Geçersiz kıl foo diğer pencerede, ya da her neyse içine aramak için.