我正在使用wx.aui来构建我的用户界面。我正在定义一个继承自wx.Panel的类,我需要在调整窗口窗格大小时更改该面板的内容。
我使用的代码与下面的代码非常相似(这是找到的here示例代码的修改版本。)
我的问题是:是否有一个wx.Panel方法在AuiManager后面调用我可以重载?如果没有,我的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()
答案 0 :(得分:3)
根据wx.Panel文档,在调整窗口大小时,“默认EVT_SIZE处理程序会自动调用wx.Panel.Layout。”
编辑:但是,上述方法无法正常工作,因此请尝试手动绑定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"