如何告知面板在使用wx.aui时正在调整大小
我正在使用 wx.aui 来构建我的用户界面。我定义了一个类,这个类是从 wx.Panel 继承而来的。当窗口的面板大小改变时,我需要更改这个面板的内容。
我使用的代码和下面的代码非常相似(这是一个修改过的示例代码,来源于 这里)。
我的问题是:AuiManager 背后是否有一个 wx.Panel 的方法可以被我重写?如果没有,我的 ControlPanel 对象怎么知道它的大小被改变了呢?
举个例子,如果我运行这段代码,然后拖动右侧上下面板之间的水平分隔线,怎么让右上角的面板知道它的大小刚刚改变了呢?
import wx
import wx.aui
class ControlPanel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.mgr = wx.aui.AuiManager(self)
leftpanel = ControlPanel(self, -1, size = (200, 150))
rightpanel = ControlPanel(self, -1, size = (200, 150))
bottompanel = ControlPanel(self, -1, size = (200, 150))
self.mgr.AddPane(leftpanel, wx.aui.AuiPaneInfo().Bottom())
self.mgr.AddPane(rightpanel, wx.aui.AuiPaneInfo().Left().Layer(1))
self.mgr.AddPane(bottompanel, wx.aui.AuiPaneInfo().Center().Layer(2))
self.mgr.Update()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '07_wxaui.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
1 个回答
3
根据wx.Panel的文档,当窗口大小改变时,wx.Panel.Layout会被默认的EVT_SIZE处理程序自动调用。
编辑:不过,上面的说法并没有像我预期的那样工作,所以可以尝试手动绑定EVT_SIZE:
class ControlPanel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
self.Bind(wx.EVT_SIZE, self.OnResize)
def OnResize(self, *args, **kwargs):
print "Resizing"