遍历Tk中的ttk :: treeview

时间:2013-05-09 11:16:23

标签: treeview tcl tk

是否有一种简单的方法来遍历Tcl / Tk ttk::treview的项目,就好像它们是列表框中的项目一样?例如:

               A
           |   |-- B
    visit  |   |   |-- C
    order  |   |   |-- D         ---->    A B C D E F G
           |   E
           V   |-- F
                   |-- G

我知道这对应于预先遍历树,这实际上是我当前的解决方案。由于我有一个最大深度为N的完整树,我可以做类似的事情:

foreach lev1 [.tree children {}] {
    do_stuff $lev1 
    foreach lev2 [.tree children $lev1] {
        do_stuff$lev2
        foreach lev3 [.tree children $lev2] {
            do_stuff $lev3
               ....
        }
    }
}

但我正在寻找一种更简单的方法。

我考虑过为每个节点添加一个标记(比如mytag)并使用:.tree tag has mytag来获取所有节点的列表。问题是,AFAIK,由此产生的订单无法得到保证,我最终可能会遇到不同类型的访问。

1 个答案:

答案 0 :(得分:3)

递归遍历应该为你做的伎俩。

的内容
proc traverse {item} {
    do_stuff $item
    foreach [.tree children $item] {
        traverse $item
    }
}


.tree traverse {}

感觉相当简单。

(免责声明:我实际上没有测试过这个。)