wxPython TreeCtrl在数百万个节点上非常慢(在多选树控件上)

Thi*_*hơn 7 wxpython python-3.x wxpython-phoenix

我正在创建具有数百万个节点的树,但是当我切换到在树控件(wx.TR_MULTIPLE)上使用多选时,对树的操作变慢,我只单击选择一个节点,这花了我几秒钟的时间。当我使用单选样式(wx.TR_SINGLE)时,不会发生这种情况。

我试图不为任何节点设置数据,也没有使用任何事件,但是它仍然很慢。有什么方法可以在树控件上使用多选,而树仍然像单选一样快速?

我在下面粘贴了修改后的演示代码:

import wx


class MyTree(wx.TreeCtrl):
    def __init__(self, parent, id, pos, size, style):
        wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.item_changed)

    def item_changed(self, evt):
        print(self.GetItemData(evt.GetItem()))


class TreePanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.tree = MyTree(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TR_HAS_BUTTONS | wx.TR_MULTIPLE)
        self.root = self.tree.AddRoot('ROOT')
        node1 = self.tree.InsertItem(self.root, 0, 'Node 1', data='node 1')
        for i in range(1000000):
            self.tree.PrependItem(node1, 'Sub node 1: ' + str(i), data='Sub node 1: ' + str(i))
        self.tree.Expand(self.root)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.tree, 1, wx.EXPAND)
        self.SetSizer(sizer)


class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent=None, title='TreeCtrl Demo')
        panel = TreePanel(self)
        self.Show()


if __name__ == '__main__':
    app = wx.App(redirect=False)
    frame = MainFrame()
    app.MainLoop()
Run Code Online (Sandbox Code Playgroud)

小智 2

我也有同样的问题。但是当我改成单选时,它又变快了,但此时我们不能选择多节点......嗯。我认为这与框架内的 C 代码有关