wxpython can';t形开关板
代码编译正常,只是无法加载第二个面板。 我看过很多关于面板切换的论坛,但没有一个对我有帮助wxpython can';t形开关板,wxpython,Wxpython,代码编译正常,只是无法加载第二个面板。 我看过很多关于面板切换的论坛,但没有一个对我有帮助 import wx class Example(wx.Frame): def __init__(self, parent, title): ##super(Example, self).__init__(parent, title=title, ## size=(500, #width
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()
您的
panel2
将panel1
作为父项。隐藏父对象时,也会隐藏其子对象
另外,您的框架没有使用主尺寸测量器。这意味着会隐式地为您创建一个对象,并将添加到frame(panel1
)的第一个对象放入此大小调整器中。您的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()
为什么这段代码不能正常工作,第二个面板从来不会显示另一个按钮我以前试过。用户界面显示不正确,在发布时,它只在第二个面板的左上角显示一个小正方形,而其余部分为空白。请参见刚刚添加的第二段。如何设置sizer?最初是用wx.Frame完成的。uuu init_uuuu(size=(900270)类似于刚刚添加的代码。查看一些大小调整器示例、教程、演示等。掌握大小调整器是wxPython的基础。