0

私がこのtreeCtrlを持っているとしましょう:

Root

    Dogs
        Pug
        Lab

    Birds
        Parrot
        Eagle

パグアイテムへのパスを取得するにはどうすればよいですか?

EX:次のようなものを取得する必要があります

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

(ただし、TreeCtrlIdsを使用)

次のような機能はありますか?

getTreePath(Item)

4

2 に答える 2

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. @gddcが指摘しているように、の代わりに、リストの反転を回避するためにpathList.append(path)使用できます。pathList.insert(0, path)
  2. GetItemText()パス名のみに関心がある場合は、オブジェクト全体ではなく、を使用して各アイテムのテキストのみを追加します。
于 2012-07-12T17:22:31.133 に答える
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)
于 2012-07-12T17:39:09.097 に答える