1

编辑:我进行了更多调试以意识到,动作所消耗的大部分时间实际上都花在了创建小部件上,而不是将它们放入 sizer 中。所以问题是如何更快地创建它们?

我需要通过添加大约 300 个复选框来动态更改对话框的内容。我使用 wx.GridSizer 和添加它们的循环,但它真的很慢。有没有办法更快地做到这一点?一些等待添加所有小部件然后手动计算位置和大小的方法,因为我相信通过调用 Sizer 的 Add 方法会立即计算大小。这是我所做的一个捷径:

... #Destroy all widgets we used to have

for el in self.elements:
    _chk = wx.CheckBox(self,-1,el["name"])
    _t1 = wx.StaticText(self,-1,el["age"])
    _t2 = wx.StaticText(self,-1,el["city"])
    self.checkboxes.append(_chk)
    self.gridSizer.Add(_chk)
    self.gridSizer.Add(_t1)
    self.gridSizer.Add(_t2)
self.SetSizer(self.gridSizer)
self.Layout()
self.Refresh()
self.Update()

添加大约 300 个元素大约需要一分钟,我相信必须有更快的方法,因为例如 QIP 或 ICQ 等应用程序会在一秒钟内显示大量联系人 :) 感谢您提供任何线索!

另外原谅我的英语。

射线

4

1 回答 1

0

我想不出任何一个界面可以同时拥有 300 个小部件。我不相信有一个很好的方法可以做到这一点。相反,您应该考虑重新设计界面,以便用户不必处理检查 300 个复选框(或处理数百个任何小部件)。唯一能够同时处理这么多复选框的小部件可能是带有复选框混合的 ListCtrl。有关示例,请参见演示。

于 2013-10-23T13:26:49.047 回答