0
一个TTK :: TreeView的是有一个简单的方法来遍历一个Tcl/Tk的ttk::treview
的项目,好像他们是在一个列表框的项目?例如:遍历Tk的
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,由此产生的顺序不能保证,我可能会以不同类型的访问结束。
感谢@nurdglaw。是的,它会解决遍历问题,基本上我在做什么,除了我的树具有已知的深度,因此我可以对“递归展开”进行排序。我希望我可以利用这个事实,即小部件已经按照我需要的顺序拥有了元素,如果有一个小部件函数按照该顺序遍历树,它会简单得多。 – 2013-05-09 20:02:18
我想如果有一些小部件函数按顺序返回所有项目,但没有一个,那会更容易。对于我的钱,你的“展开递归”使代码变得简单,但我想这是一个品味的问题。如果你需要在很多地方进行这种遍历,你可以在你自己的类中包装ttk :: notebook并添加一个成员函数来返回所有的项目,然后遍历它返回“doing_stuff”的列表。 – nurdglaw 2013-05-09 20:38:02
@ Remo.D如果您使用的是8.6,它会在内部为您“展开递归”。但是对于树的任何理智的深度来说,这并不重要。毕竟,“尝试可能工作的最简单的东西”是软件工程的经典原理。 – 2013-05-10 07:54:35