我正在学习 wxPython 并尝试使用 GridSizer,因为它是我最喜欢的处理布局的方式。除了虔诚地阅读我正在使用的类的 API 之外,我还收集了 wx wiki 和教程周围的点点滴滴,以将所有内容包装在一起。
但是,不知何故,我正在测试的小部件,两个应该在彼此之上的 ListBox,反而出现在彼此之上。
单击后,我只能看到第一个 ListBox:元素在我选择它们时弹出,TABbing 返回第一个列表。
很明显,我无意中跳过了一些东西。环顾四周,我认为问题在于我没有正确使用 Layout(),但我用所有容器对其进行了测试,但无济于事。此外,我在网上发现的问题似乎提到了调整大小以刷新窗口,但即使调整我的窗口大小,也不会发生任何有价值的事情。
最后,代码如下:
import wx
class MainWindow(wx.Frame):
def __init__(self):
super().__init__(parent=None, id=-1,
title="Test Window",
style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))
main_panel = wx.Panel(parent=self, id=wx.ID_ANY)
wx.ListBox(main_panel, id=wx.ID_ANY, size=wx.Size(200, 200),
style=wx.LB_SINGLE | wx.LB_ALWAYS_SB | wx.LB_SORT,
choices=[
"Babble",
"Bobble",
"Bubble"
])
wx.ListBox(main_panel, id=wx.ID_ANY, size=wx.Size(200, 200),
style=wx.LB_SINGLE | wx.LB_ALWAYS_SB,
choices=[
"One",
"Two",
"Three"
])
main_grid = wx.GridSizer(cols=1, rows=2, gap=wx.Size(50, 50))
main_grid.Add(main_panel)
self.SetAutoLayout(True)
self.SetSizer(main_grid)
self.Layout()
self.Show(True)
if __name__ == "__main__":
app = wx.App(False)
app.SetTopWindow(MainWindow())
app.MainLoop()