wxPython:如何加快向网格添加大量小部件的速度

时间:2013-10-22 22:01:06

标签: python wxpython wxwidgets sizer

编辑:我调试了一点,意识到,操作消耗的大部分时间实际上都花在创建小部件上,而不是将它们放入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这样的应用程序在一秒钟内显示了很多联系人:) 谢谢你的任何线索!

另外请原谅我的英语。

1 个答案:

答案 0 :(得分:0)

我无法想到任何一次有300个小部件的界面。我不相信有一个很好的方法来实现这一目标。相反,您应该考虑重新设计界面,以便用户不必处理检查300个复选框(或处理数百个任何小部件)。唯一可以同时处理那么多复选框的小部件可能是带有复选框mixin的ListCtrl。请参阅演示中的示例。