2009-06-14 9 views
2

wx.aui를 사용하여 사용자 인터페이스를 만듭니다. wx.Panel에서 상속받은 클래스를 정의 중이므로 창 패널의 크기를 조정할 때 해당 패널의 내용을 변경해야합니다.wx.aui를 사용할 때 패널의 크기를 조정하는 방법

아래 코드와 매우 유사한 코드를 사용하고 있습니다 (수정 된 버전의 샘플 코드는 here입니다).

내 질문은 : 오버로드 할 수있는 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() 

답변

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

관련 문제