【发布时间】:2021-08-25 15:11:14
【问题描述】:
我有一个 wxGridBagSizer,我希望稍后刷新这些项目。此代码无法将项目添加到 sizer。
import wx
import random
class MainFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super().__init__(None, *args, **kwargs)
self.panel = MainPanel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.panel)
self.SetSizer(sizer)
self.Center()
self.Show()
def on_reset_click(self, event):
self.panel.numbers_fill(random.randint(1, 20))
class MainPanel(wx.Panel):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
cmd_reset = wx.Button(self, id=wx.ID_OK)
cmd_reset.Bind(wx.EVT_BUTTON, parent.on_reset_click)
self.number_sizer = wx.GridBagSizer(5, 5)
self.numbers_fill(random.randint(1, 20))
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(cmd_reset)
sizer.Add(self.number_sizer)
self.SetSizer(sizer)
def numbers_fill(self, max_integer):
self.clear_sizer(self.number_sizer)
for index, _ in enumerate(range(max_integer)):
row = int(index / 5)
column = index % 5
lbl_number = wx.StaticText(self, label=str(_))
self.number_sizer.Add(lbl_number, pos=(row, column))
@staticmethod
def clear_sizer(sizer):
for child in sizer.GetChildren():
sizer_child = child.GetWindow()
sizer_child.Hide()
sizer.Detach(sizer_child)
if __name__ == '__main__':
wx_app = wx.App()
MainFrame()
wx_app.MainLoop()
【问题讨论】: