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