wx.Treectrl项目查找表

时间:2014-03-13 12:51:51

标签: python wxpython

我正在尝试创建一个查找表来将wxTreeItem连接到对象。选择或双击项目后,应对此对象执行操作。 神秘的是,我发现在AppendItem之后返回的项目实例是附加到树的真实项目的副本,或self.tree.GetSelection()event.GetItem()返回相关项目的副本。

import wx

class RandomObj(object):
    def __init__(self, name):
        self.name = name

class TreeExample(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='Tree Example', size=(200, 130))
        self.tree = wx.TreeCtrl(self, size=(200, 100))

        root = self.tree.AddRoot('root')
        self.itemLUT = {}
        for obj in [RandomObj('item1'), RandomObj('item2'), RandomObj('item3')]:
            item = self.tree.AppendItem(root, obj.name)
            print item
            self.itemLUT[id(item)] = obj
            self.itemLUT[id(obj)] = item

        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivated, self.tree)
        self.tree.Expand(root)

    def OnActivated(self, event):
        item = event.GetItem()
        print 'Double clicked on', self.tree.GetItemText(item)
        print id(item) in self.itemLUT.keys()
        print self.tree.GetSelection()
        print item

app = wx.PySimpleApp(None)
TreeExample().Show()
app.MainLoop()

有什么建议吗?是否有任何正确的方法来连接和访问树项上的操作(鼠标或键盘)上的对象。

2 个答案:

答案 0 :(得分:1)

最好的方法是使用SetItemData

将数据放入项目中
item = self.tree.AppendItem(root, obj.name)
self.tree.SetItemData(item,obj)

然后,您可以使用GetItemData从项目中提取数据。你可以放任何东西。

答案 1 :(得分:1)

一个很好的方法是

item = self.tree.AppendItem(root, obj.name)
self.tree.SetItemData(item, wx.TreeItemData(obj)) 

并在事件方法中

def OnActivated(self, event):
    item = event.GetItem()
    itemObject = self.tree.GetItemData(item).GetData()
相关问题