2013-02-20 73 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