2009-06-14 110 views
2

當我使用wx.aui建立我的用戶界面,它調整大小的面板。我正在定義一個從wx.Panel繼承的類,並且我們需要在其窗口窗格調整大小時更改該面板的內容。如何判斷使用wx.aui

我使用的代碼非常類似於下面的代碼(其是示例代碼的修改版本中發現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() 

回答

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" 
+0

是啊。我沒有想過自己將事件綁定......謝謝! – Mathieu 2009-06-15 00:22:59