如何在使用wx.aui时告诉面板它正在调整大小

时间:2009-06-14 22:27:57

标签: python wxpython

我正在使用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()

1 个答案:

答案 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"