是否有一种简单的方法来遍历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,由此产生的订单无法得到保证,我最终可能会遇到不同类型的访问。
答案 0 :(得分:3)
递归遍历应该为你做的伎俩。
的内容proc traverse {item} {
do_stuff $item
foreach [.tree children $item] {
traverse $item
}
}
.tree traverse {}
感觉相当简单。
(免责声明:我实际上没有测试过这个。)