2011-10-27 5 views

答えて

1

データを簡単に検索できる他の構造で保存し、そのデータを表示するためにTreeCtrlを使用することを検討してください。そうでなければ、あなたはこのようなTreeCtrlルート項目の子を反復処理することができます。

def item_exists(tree, match, root): 
    item, cookie = tree.GetFirstChild(root) 

    while item.IsOk(): 
     if tree.GetItemText(item) == match: 
      return True 
     #if tree.ItemHasChildren(item): 
     # if item_exists(tree, match, item): 
     #  return True 
     item, cookie = tree.GetNextChild(root, cookie) 
    return False 

result = item_exists(tree, 'some text', tree.GetRootItem()) 

をそれ再帰検索になりますコメント行のコメントを外します。テキストで検索するための

def walk_branches(tree,root): 
    """ a generator that recursively yields child nodes of a wx.TreeCtrl """ 
    item, cookie = tree.GetFirstChild(root) 
    while item.IsOk(): 
     yield item 
     if tree.ItemHasChildren(item): 
      walk_branches(tree,item) 
     item,cookie = tree.GetNextChild(root,cookie) 

for node in walk_branches(my_tree,my_root): 
    # do stuff 
0

再帰的なツリートラバーサルを処理するためのよりよい方法は、あなたが、あなたのツリーノード上の好きな操作を実行するを再利用することができますジェネレータオブジェクト、でそれをラップすることです再帰なし:

def GetItemByText(self, search_text, tree_ctrl_instance): 
     retval = None 
     root_list = [tree_ctrl_instance.GetRootItem()] 
     for root_child in root_list: 
      item, cookie = tree_ctrl_instance.GetFirstChild(root_child) 
      while item.IsOk(): 
       if tree_ctrl_instance.GetItemText(item) == search_text: 
        retval = item 
        break 
       if tree_ctrl_instance.ItemHasChildren(item): 
        root_list.append(item) 
       item, cookie = tree_ctrl_instance.GetNextChild(root_child, cookie) 
     return retval 
関連する問題