0

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を使用してすべてのノードのリストを取得することを検討しました。問題は、私の知る限り、結果の順序が保証されておらず、別のタイプの訪問になる可能性があることです.

4

1 に答える 1

3

再帰トラバーサルはあなたのためにトリックを行うべきです。の線に沿った何か

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


.tree traverse {}

感じもかなりシンプル。

(免責事項:私は実際にこれをテストしていません。)

于 2013-05-09T19:35:01.413 に答える