Wxpython 如何将面板放置在另一个面板中?
如何将wx.Panel放置在另一个wx.Panel中?只是一个不起作用的小测试程序:Wxpython 如何将面板放置在另一个面板中?,wxpython,Wxpython,如何将wx.Panel放置在另一个wx.Panel中?只是一个不起作用的小测试程序: import wx class TstApp(wx.App): def OnInit(self): self.frame = wx.Frame(None, -1, "TstApp", wx.DefaultPosition, wx.DefaultSize) self.pn = wx.Panel(self.frame, -1) self.p
import wx
class TstApp(wx.App):
def OnInit(self):
self.frame = wx.Frame(None, -1, "TstApp", wx.DefaultPosition,
wx.DefaultSize)
self.pn = wx.Panel(self.frame, -1)
self.pn2 = wx.Panel(self.pn, -1)
self.btn = wx.Button(self.pn2, -1, "A Button")
self.frame.Show()
self.SetTopWindow(self.frame)
return True
app = TstApp(0)
app.MainLoop()
您完全忽略了“布局管理”主题。我建议您阅读zetcode教程的第页。我已经介绍了
wx.BoxSizer
s来修复示例代码:
import wx
class TstApp(wx.App):
def OnInit(self):
self.frame = wx.Frame(None, -1, "TstApp", wx.DefaultPosition,
wx.DefaultSize)
self.pn = wx.Panel(self.frame, -1)
sizer1 = wx.BoxSizer(wx.VERTICAL)
self.pn.SetSizer(sizer1)
self.pn2 = wx.Panel(self.pn, -1)
sizer2 = wx.BoxSizer(wx.VERTICAL)
self.pn2.SetSizer(sizer2)
sizer1.Add(self.pn2)
self.btn = wx.Button(self.pn2, -1, "A Button")
sizer2.Add(self.btn)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
app = TstApp(0)
app.MainLoop()
顺便说一句,最好是在从
wx.Frame
派生的类中创建小部件。正如phineas已经说过的,您应该只使用大小调整器来排列小部件。但是如果您真的想将多个面板相邻放置,那么您也可以使用大小调整器
import random
import wx
########################################################################
class RandomPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
color = random.choice(["green", "blue", "yellow", "red"])
self.SetBackgroundColour(color)
########################################################################
class MainPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
firstSubPanel = RandomPanel(self)
secondSubPanel = RandomPanel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(firstSubPanel, 1, wx.EXPAND|wx.ALL, 5)
sizer.Add(secondSubPanel, 1, wx.EXPAND|wx.ALL, 5)
self.SetSizer(sizer)
########################################################################
class MainFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Panels")
panel = MainPanel(self)
if __name__ == "__main__":
app = wx.App(False)
frame = MainFrame()
frame.Show()
app.MainLoop()