簡體   English   中英

wxPython TreeCtrl非常慢,有數百萬個節點(在多選樹控件上)

[英]wxPython TreeCtrl very slow with millions of nodes (on multi-select tree control)

我正在創建一個包含數百萬個節點的樹,但是當我在樹控件(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()

我也有同樣的問題。 但是當我改為單一選擇時它會再次變快,但此時我們無法選擇多個節點......嗯。 我認為這與框架內的C代碼有關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM