是否有一种简单的方法来遍历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
来获取所有节点的列表。问题是,我敢肯定,不能保证最终的订单,我可能会以不同类型的访问告终。
递归遍历应该可以满足您的要求。
之类的东西proc traverse {item} {
do_stuff $item
foreach [.tree children $item] {
traverse $item
}
}
.tree traverse {}
感觉也相当简单。
(免责声明:我还没有实际测试过)