2016-03-22 54 views
0

アプリケーションのウィンドウサイズを取得してアプリケーションの他のモジュールに渡したい場合、ウィンドウサイズが更新されたらユーザーがウィンドウのサイズを変更した場合)、更新されたウィンドウサイズも他のモジュールに渡されます。wxPython:ウィンドウのサイズをリアルタイムで変更するときのウィンドウサイズの更新方法

例えば、私はfoo()で使用できるように、ウィンドウサイズをself.sizeに保存しようとしましたが、以下のようなコードを試しました。しかし、このコードは私に'TestPanel' object has no attribute 'sizeというエラーメッセージを表示します。私は達成したいことをする方法があるのだろうかと思います。

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() 

答えて

1

最初に、そのエラーメッセージを表示した内容を確認する必要があります。コードをそのまま使用して、__init__メソッドでfooが呼び出される前にsize属性が設定されておらず、そのエラーが発生していることを認識してください。

fooの呼び出しをEVT_SIZE(この場合はOnSize)のハンドラに遅らせることです。このイベントは、ウィンドウが表示されるときに呼び出され、デフォルトサイズ(つまりself.sizeに設定されています)にリサイズされます。あなたは、その後、あなたが何をしたいかを簡素化することができます:

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) 

他のウィンドウに呼び出すためにオーバーライドfoo、または何でも。

関連する問題