VitualTreeサンプル
http://www.wxpython.org/docs/api/wx.lib.mixins.treemixin.VirtualTree-class.html
wxLC_VIRTUALのツリー版だそうで。
これはなかなか快適そうだ。
#!/usr/bin/python # coding: utf-8 # 2009/12/8 4タブ化してVTree.SelectPath()を追記 import wx from wx.lib.mixins import treemixin class TreeModel(object): def __init__(self, root): self.root=root # @param indices[in] 目的のノードへのパスをtupleで受ける # rootノードは () # rootの一つ目の子ノードは (0, ) (1要素のタプルは不許可) # その2番目の子ノードは (0, 1) という具合 def GetItem(self, indices): print indices node=self.root # パスを辿っていく for index in indices: node=node[1][index] return node def GetText(self, indices): return self.GetItem(indices)[0] class VTree(treemixin.VirtualTree, wx.TreeCtrl): def __init__(self, parent, model): super(VTree, self).__init__(parent) self.model=model self.RefreshItems() # 以下の2つが最低限必要 def OnGetItemText(self, indices): return self.model.GetText(indices) def OnGetChildrenCount(self, indices): return len(self.model.GetItem(indices)[1]) # 追記 # indexのリストからノードを選択状態にする def SelectPath(self, indices): item=self.GetRootItem() while len(indices)>0: index=indices.pop(0) item, cookie=self.GetFirstChild(item) for i in xrange(index): item=self.GetNextSibling(item) self.SelectItem(item) self.EnsureVisible(item) class MyFrame(wx.Frame): def __init__(self, parent): super(MyFrame, self).__init__(parent) # tree data tree=('root', [ ('node1', []), ('node2', [ ('node21', [ ('node211', [ ]) ]) ]), ('node3', []), ] ) model=TreeModel(tree) VTree(self, model) app=wx.App() frame=MyFrame(None) frame.Show() app.MainLoop()