在TreeCtrl上获取项目的路径

时间:2012-07-12 17:09:28

标签: python wxpython wxwidgets

让我说我有这个treeCtrl:

Root

    Dogs
        Pug
        Lab

    Birds
        Parrot
        Eagle

如何获得哈巴狗项目的路径?

EX:我应该得到类似的东西,

["root","Dogs","Pug"]

(但使用TreeCtrlIds)

是否有像

这样的功能

getTreePath(Item)

2 个答案:

答案 0 :(得分:2)

您可以迭代调用GetItemParent(item)从项目到根节点,如下所示(来源:TreeCtrl api):

root = myTree.GetRootItem()
pathList = [item]
done = False
while not done:
    path = myTree.GetItemParent(item)
    pathList.append(path)
    if path==root:
        done=True

请注意,这将为您提供所需顺序的项目,请使用pathList.reverse()进行更正。

编辑:

  1. 正如@ g.d.d.c所指出的那样,您可以使用pathList.append(path)而不是pathList.insert(0, path)来避免反转您的列表。
  2. 如果您只对路径名感兴趣,请仅使用GetItemText()而不是整个对象附加每个项目的文本。

答案 1 :(得分:2)

我也使用迭代方法,但从当前选择的项目开始。它看起来像这样:

pieces = []
item = self.tree.GetSelection()

while self.tree.GetItemParent(item):
  piece = self.tree.GetItemText(item)
  pieces.insert(0, piece)
  item = self.tree.GetItemParent(item)