如何在下面的wx.TreeCtrl名为fileTree的附加树项中添加额外数据。我将数据从文本文件读入数组以构建树。树中的追加项是图像的文件名,但是我想知道如何将完整的文件路径添加到每个项。当我双击某项而不是仅其文件名时,必须显示完整的文件路径。

def __init__(self, *args, **kwds):

    self.fileTree = wx.TreeCtrl(self, size=(200, 100))
    self.root = self.fileTree.AddRoot('Images')
    self.allImages = self.fileTree.AppendItem(self.root, 'All')
    imgLst=self.generateList(imagelist)# Reads a text file with filepaths into list

    for item in imgLst:
        tmp=item
        tmp = tmp[tmp.rfind("\\")+1:tmp.rfind(".")]
        self.fileTree.AppendItem(self.allImages, tmp)

    self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.onTreeDClick, self.fileTree)

def onTreeDClick(self,event):
    print 'Double clicked on', self.fileTree.GetItemText(event.GetItem())

def generateList(self, fname):
    f = open(fname, "rb")

    a=[]
    for line in f:
        a.append(line.strip())
    return a

最佳答案

wx.TreeCtrl中,您可以使项目与某些数据相关联。此数据是一个wx.TreeItemData类实例,可以包含任意Python对象。让我们用代码来澄清一下:

# Let fullPath be holding full path you your file (i.e. in Python string)
fileInfo = wx.TreeItemData(fullPath)


fileInfo对象的wx.TreeItemData实例可以与任意wx.TreeCtrl项目相关联:

# Let item variable contain your tree item object
self.fileTree.SetPyData(item, fileInfo)


在上面的代码中,我们已将item对象与fileInfo对象相关联。您可以在事件处理程序中访问关联的对象:

self.fileTree.GetPyData(event.GetItem())


就这样。注意,任何Python对象都可以与wx.TreeCtrl项目关联。

10-07 19:12
查看更多