获取树上项目的路径Ctrl



假设我有这个树Ctrl:

Root
    Dogs
        Pug
        Lab
    Birds
        Parrot
        Eagle

如何获取pug项目的路径?

我应该买点之类的

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

(但使用TreeCtrlIds)

有没有像这样的功能

getTreePath(Item)

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

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

您可以迭代调用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.insert(0, path)来避免颠倒列表,而不是pathList.append(path)
  2. 如果您只对路径名称感兴趣,请使用GetItemText()而不是整个对象仅附加每个项目的文本

最新更新