2013-02-20 61 views
1

代碼編譯好了,只是無法加載第二個面板。 我已經調查了面板切換的許多論壇,但他們似乎都沒有幫助。wxpython無法切換面板

import wx 

class Example(wx.Frame): 
    def __init__(self, parent, title): 
     ##super(Example, self).__init__(parent, title=title, 
     ##        size=(500, #width 
     ##          300)) #height 
     wx.Frame.__init__(self, None, size=(900,270)) 
     self.InitUI() 
     self.Centre() 
     self.Show() 

    #define User Interface 
    def InitUI(self): 
     self.panel1 = wx.Panel(self, -1) 

     #Menu bar 
     menubar = wx.MenuBar() 
     filem = wx.Menu() 
     editm = wx.Menu() 
     helpm = wx.Menu() 

     menubar.Append(filem, '&File') 
     menubar.Append(editm, '&Edit') 
     menubar.Append(helpm,'&help') 
     self.SetMenuBar(menubar) 

     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     #buttons 
     b1 = wx.Button(self.panel1, label='button', size=(300,30), pos=(0,0)) 
     hbox.Add(b1) 
     b1.Bind(wx.EVT_BUTTON, self.OnB1) 


     #panel2 
     self.panel2 = wx.Panel(self.panel1, -1) 
     self.panel2.Hide() 
     vbox = wx.BoxSizer(wx.HORIZONTAL) 
     b2 = wx.Button(self.panel2, label='button2', size=(300,30), pos=(0,0)) 
     vbox.Add(b2) 

    def OnB1(self, event): 
     self.panel2.Show() 
     self.panel1.Hide() 


if __name__ == '__main__': 
    app = wx.App() 
    Example(None, title='') 
    app.MainLoop() 
+0

和問題? – VladL 2013-02-20 15:14:47

+0

爲什麼這段代碼不能正常工作,第二個面板從來沒有顯示過與其他按鈕 – Iancovici 2013-02-20 15:26:35

回答

0

panel2具有panel1父。當你隱藏父母時,你也隱藏自己的孩子。

此外,您還沒有使用主尺寸爲您的框架。這意味着將爲您隱式創建一個,並將添加到幀的第一個對象(panel1)放入此sizer中。您的panel2未包括在sizer中,因此修復父母會導致panel2在點擊後顯示,但未正確調整大小。

可以解決這個問題是這樣的:

import wx 

class Example(wx.Frame): 
    def __init__(self, parent, title): 
     ##super(Example, self).__init__(parent, title=title, 
     ##        size=(500, #width 
     ##          300)) #height 
     wx.Frame.__init__(self, None, size=(900,270)) 
     self.InitUI() 
     self.Centre() 
     self.Show() 

    #define User Interface 
    def InitUI(self): 
     self.sizer = wx.BoxSizer() # Main window sizer 

     self.panel1 = wx.Panel(self, -1) 
     self.sizer.Add(self.panel1, 1, flag=wx.EXPAND) 

     #Menu bar 
     menubar = wx.MenuBar() 
     filem = wx.Menu() 
     editm = wx.Menu() 
     helpm = wx.Menu() 

     menubar.Append(filem, '&File') 
     menubar.Append(editm, '&Edit') 
     menubar.Append(helpm,'&help') 
     self.SetMenuBar(menubar) 

     self.hbox = wx.BoxSizer(wx.HORIZONTAL) 
     #buttons 
     b1 = wx.Button(self.panel1, label='button', size=(300,30), pos=(0,0)) 
     self.hbox.Add(b1) 
     b1.Bind(wx.EVT_BUTTON, self.OnB1) 
     self.panel1.SetSizer(self.hbox) 


     #panel2 
     self.panel2 = wx.Panel(self, -1) 
     self.sizer.Add(self.panel2, 1, flag=wx.EXPAND) 
     self.panel2.Hide() 
     self.vbox = wx.BoxSizer(wx.HORIZONTAL) 
     b2 = wx.Button(self.panel2, label='button2', size=(300,30), pos=(0,0)) 
     self.vbox.Add(b2) 
     self.panel2.SetSizer(self.vbox) 

     self.SetSizer(self.sizer) # Set main window sizer 

    def OnB1(self, event): 
     self.panel2.Show() 
     self.panel1.Hide() 
     self.sizer.Layout() # Force the main window sizer to recalculate 

if __name__ == '__main__': 
    app = wx.App(False) 
    Example(None, title='') 
    app.MainLoop() 
+0

我以前試過。 用戶界面不正確, 在發佈時,它只顯示爲第二個面板左上角的小方塊,其餘爲空白 – Iancovici 2013-02-20 15:43:53

+0

請參閱剛剛添加的第二段。 – Fenikso 2013-02-20 15:46:17

+0

如何設置sizer?最初它是用wx.Frame .__ init完成的__(size =(900,270) – Iancovici 2013-02-20 15:46:26