【发布时间】:2018-07-23 18:42:16
【问题描述】:
我编写了一个小应用程序,用于从数据集中解析数据,并将其显示在 wx 视觉文件中,并带有几个不同的文件。显示的元素都在不同页面上的一个笔记本对象中。一些是 wx.TextCtrl/wx.StyledTextCtrl 对象,其他的是 wx.TreeCtrl 对象。
一个特定的 wx.TreeCtrl 对象填充了超过 2000 个分支。
创建树并填充它:
data_tree = wx.TreeCtrl(data_page, style=wx.TR_HAS_BUTTONS | wx.TR_HAS_VARIABLE_ROW_HEIGHT)
data_to_parse = utils.getData() # This returns a list of objects with data string
root = data_tree.GetRootItem()
for entry in data_to_parse:
# The method (utils.isMatch())is used to verify contents in the string.
# If there is a match the string is used to create a tree entry.
if utils.isMatch(entry.data):
data_tree.AppendItem(root, text=entry.data)
调用 DeleteAllItems() 方法时:
data_tree.DeleteAllItems()
我注意到当应用程序在这个特定的树上调用 DeleteAllItems() 方法时,在方法返回之前有很长的等待时间(5-10 秒)。这会导致在填充树时关闭应用程序的时间很长。由于此工具用于动态评估数据集的问题,因此必须使该工具在必要时快速打开/关闭。
我的问题是关于 wx.TreeCtrl 对象上 DeleteAllItems 的性能。这是释放这些资源的唯一方法吗?有没有更省时的替代方案?
我知道可能会建议减少树中主动加载的元素的数量,但这并不可取,因为消费者使用此树中的完整数据集来了解事件流以及每个事件中的数据.
【问题讨论】:
-
你能显示一些代码吗?具体来说,如何创建树控件。
标签: python-2.7 wxpython wxwidgets