wxPython:如何在 window 实时调整大小时更新 window 大小
wxPython: How to update window size as the window resizes in real-time
我希望能够获取应用程序的 window 大小并将其传递给应用程序中的其他模块,并且当 window 大小更新时(例如,如果用户调整大小window),更新后的 window 大小也会传递给其他模块。
例如,我尝试了类似下面的代码,我尝试将 window 大小存储在 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()
您首先需要找出错误信息的来源。按原样使用您的代码,请注意,在 __init__
方法中,size
属性在其 foo
被调用之前未在任何位置设置,从而给您带来该错误。
您想要做的是延迟对 EVT_SIZE
的处理程序 foo
的调用,在本例中为 OnSize
。当 window 变为可见时将调用该事件,因为它将调整为默认大小(因此设置 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
调用另一个 window 或其他。
我希望能够获取应用程序的 window 大小并将其传递给应用程序中的其他模块,并且当 window 大小更新时(例如,如果用户调整大小window),更新后的 window 大小也会传递给其他模块。
例如,我尝试了类似下面的代码,我尝试将 window 大小存储在 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()
您首先需要找出错误信息的来源。按原样使用您的代码,请注意,在 __init__
方法中,size
属性在其 foo
被调用之前未在任何位置设置,从而给您带来该错误。
您想要做的是延迟对 EVT_SIZE
的处理程序 foo
的调用,在本例中为 OnSize
。当 window 变为可见时将调用该事件,因为它将调整为默认大小(因此设置 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
调用另一个 window 或其他。