Python 2.7 在wx.TreeCtrl对象上调用DeleteAllItems方法需要很长时间

Python 2.7 在wx.TreeCtrl对象上调用DeleteAllItems方法需要很长时间,python-2.7,wxpython,wxwidgets,Python 2.7,Wxpython,Wxwidgets,我已经编写了一个小应用程序,用于解析数据集中的数据,并用wxvisual和几个不同的文件显示它。显示的元素都位于单独页面上的一个笔记本对象中。一些是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_HEI

我已经编写了一个小应用程序,用于解析数据集中的数据,并用wxvisual和几个不同的文件显示它。显示的元素都位于单独页面上的一个笔记本对象中。一些是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()方法时:

我注意到,当应用程序在这个特定的树上调用DeleteAllItems()方法时,在方法返回之前有很长的等待时间(5-10秒)。这会导致在填充树时关闭应用程序的长时间延迟。由于此工具用于动态评估数据集的问题,因此在必要时快速打开/关闭此工具非常重要

我的问题是关于DeleteAllItems在wx.TreeCtrl对象上的性能。这是释放这些资源的唯一途径吗?是否有更省时的替代方案


我知道可能会建议减少树中活动加载元素的数量,但这并不可取,因为消费者使用此树中的完整数据集来了解事件流以及每个事件中的数据。

我找到了一个解决方法


调用os.kill(os.getpid(),signal.SIGTERM)可以让我的应用程序快速退出,而Windows可以处理内存清理。

不清楚为什么要花这么长时间。2000个分支非常多,可以说超过了合理的上限(如果需要很多项,可以考虑使用
wxDataViewCtrl
),但删除它们不应该花费10秒钟


您的代码中是否有任何
wxEVT\u TREE\u DELETE\u项
处理程序?它们将针对每个要删除的项目执行,因此如果执行,请确保在删除树之前解除绑定。

能否显示一些代码?具体来说,如何创建树控件。
data_tree.DeleteAllItems()