私は wxPython を学んでおり、レイアウトを処理する私のお気に入りの方法である GridSizer を試しています。私が使用しているクラスの API を熱心に読むことに加えて、wx wiki とチュートリアルの周りの断片をあさり、すべてをまとめました。
どういうわけか、私がテストしているウィジェットは、互いに重なっているはずの 2 つの ListBox が、代わりに重なって表示されます。
クリックすると、最初の ListBox しか表示されません。要素を選択すると要素がポップアップ表示され、TAB キーを押すと最初のリストに戻ります。
うっかりスキップしているものがあることは明らかです。周りを見回して、問題は Layout() を正しく使用していないことだと思いましたが、すべてのコンテナーでテストしても無駄でした。また、私が Web で見つけた問題は、ウィンドウを更新するためのサイズ変更について言及しているようですが、ウィンドウのサイズを変更しても、何も意味がありません。
最後に、コードは次のとおりです。
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()