使用wxpython,我想在一个面板上创建多个StaticBox,并在每个StaticBox中添加一些小部件。我如何才能做到这一点?一个最小的例子开始。
import wx
app = wx.App()
frame = wx.Frame(None, size=(700, 500))
panel = wx.Panel(frame)
vbox = wx.BoxSizer(wx.VERTICAL)
# Three StaticBox, with a StaticText within each
for n in range(3):
sizer = wx.StaticBoxSizer(wx.VERTICAL, wx.StaticBox(panel,label=f"Box {n}"))
sizer.Add(wx.StaticText(panel, label=f"StaticText of box {n}"))
vbox.Add(sizer, 1, wx.EXPAND | wx.ALL, 5)
panel.SetSizer(vbox)
frame.Show()
app.MainLoop()
我的代码有什么问题,因为我得到了下面的窗口。
手册 https:/wxpython.orgPhoenixdocshtmlwx.StaticBoxSizer.html。 给了一个很好的例子来说明如何使用这个widget容器。
下面是你修改的方法和一个更迂腐的方法,注释出来,使用老话explict is better than implicit。
import wx
app = wx.App()
frame = wx.Frame(None, size=(700, 500))
panel = wx.Panel(frame)
vbox = wx.BoxSizer(wx.VERTICAL)
# Three StaticBox, with a StaticText within each
#sz1 = wx.StaticBoxSizer(wx.VERTICAL, panel, "Box1")
#sz1.Add(wx.StaticText(sz1.GetStaticBox(), wx.ID_ANY,"This window is a child of staticbox 1"))
#sz2 = wx.StaticBoxSizer(wx.VERTICAL, panel, "Box2")
#sz2.Add(wx.StaticText(sz2.GetStaticBox(), wx.ID_ANY,"This window is a child of staticbox 2"))
#sz3 = wx.StaticBoxSizer(wx.VERTICAL, panel, "Box3")
#sz3.Add(wx.StaticText(sz3.GetStaticBox(), wx.ID_ANY,"This window is a child of staticbox 3"))
#vbox.Add(sz1, 1, wx.EXPAND | wx.ALL, 5)
#vbox.Add(sz2, 1, wx.EXPAND | wx.ALL, 5)
#vbox.Add(sz3, 1, wx.EXPAND | wx.ALL, 5)
for n in range(3):
sizer = wx.StaticBoxSizer(wx.VERTICAL, panel,label=f"Box {n}")
sizer.Add(wx.StaticText(sizer.GetStaticBox(), label=f"StaticText of box {n}"))
vbox.Add(sizer, 1, wx.EXPAND | wx.ALL, 5)
panel.SetSizer(vbox)
frame.Show()
app.MainLoop()
需要注意的是,有些 themes
在Linux上,不知道其他平台)不显示盒子。因此,虽然它可能在你的机器上工作,但在其他人身上可能不工作,这取决于他们选择的桌面外观。