如何在一个面板上添加多个StaticBox(s),并在每个StaticBox中添加子项?

问题描述 投票:0回答:1

使用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()

我的代码有什么问题,因为我得到了下面的窗口。

enter image description here

python user-interface wxpython wxpython-phoenix
1个回答
1
投票

手册 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上,不知道其他平台)不显示盒子。因此,虽然它可能在你的机器上工作,但在其他人身上可能不工作,这取决于他们选择的桌面外观。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.