Skip to main content
 首页 » 编程设计

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

2024年09月03日28dyllove98

我正在使用 wx.aui 来构建我的用户界面。我正在定义一个继承自 wx.Panel 的类,我需要在调整其窗口 Pane 大小时更改该面板的内容。

我使用的代码与下面的代码非常相似(它是找到的示例代码的修改版本 here )。

我的问题是:是否有一个 wx.Panel 方法被我可以重载的 AuiManager 在幕后调用?如果不是,我的 ControlPanel 对象怎么知道它正在调整大小?

例如,如果我运行此代码并向上拖动右侧上下 Pane 之间的水平分隔线,右上面板如何告知其大小刚刚改变?

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() 

请您参考如下方法:

根据 wx.Panel 文档,wx.Panel.Layout “在调整窗口大小时由默认的 EVT_SIZE 处理程序自动调用。”

编辑:但是,上面的方法并没有像我预期的那样工作,所以尝试手动绑定(bind) 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"