wxPython:如何在窗口实时调整大小时更新窗口大小

时间:2016-03-22 03:39:17

标签: python events wxpython

我希望能够获取应用程序的窗口大小并将其传递给应用程序中的其他模块,并且当窗口大小更新时(例如,如果用户调整窗口大小),更新的窗口大小也会得到传递给其他模块。

例如,我尝试了类似下面的代码,我尝试将窗口大小存储在self.size中,以便可以在foo()中使用。但是,此代码会给我一条错误消息'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 个答案:

答案 0 :(得分:1)

首先,您需要先找出给您错误消息的内容。按照您的代码,请注意__init__方法中,size属性未在调用foo之前的任何位置设置,从而为您提供错误。

您要做的是将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以调用另一个窗口或其他任何窗口。

相关问题