Как добавить несколько StaticBox (ов) с дочерними элементами внутри каждого StaticBox на панели? - PullRequest
0 голосов
/ 02 мая 2020

С помощью wx python я хочу создать несколько 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

1 Ответ

0 голосов
/ 02 мая 2020

Руководство https://wxpython.org/Phoenix/docs/html/wx.StaticBoxSizer.html дает хороший пример того, как использовать этот контейнер виджетов.

Вот ваш метод, модифицированный и более педантичный c метод, закомментированный, использование старого экспликации изречения лучше, чем неявного.

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

...