2017-08-28 1 views
0

更新ボタンをクリックすると、alistが更新されます。どのようにして更新値を取得でき、コンボボックスで選択できますか?どうもありがとう!変数をトレースする方法は?

namespace eval PreGen { 
    set alist {sec1 sec2 sec3 sec4} 
    proc SetUp {} { 
     ttk::combobox .c -values $PreGen::alist 
     button .b -text update -command PreGen::Update 
     grid ... 
    } 
    proc Update {} { 
     ... 
     set PreGen::alist {op1 op2 op3 ...} #the list value got from other file 
     ... 
    } 
} 

答えて

0

トレースを簡単に追加できます。トレース・コールバックを実装するためのヘルパー・プロシージャを使用するのが最も明確ですが、代わりにapplyという用語を使用できます。これもうまくいくでしょうが、コードは1行でもっと詰め込むので、もう少し不透明です。ここでは手順のバージョンがあります:もちろん

namespace eval PreGen { 
    # ALWAYS use [variable] to set default values for variables 
    variable alist {sec1 sec2 sec3 sec4} 

    proc SetUp {} { 
     variable alist 
     ttk::combobox .c -values $alist 
     trace add variable alist write ::PreGen::AlistUpdated 
     # Could use [namespace code] to generate the callback: 
     # trace add variable alist write [namespace code AlistUpdated] 
     # but that feels like overkill in this case 
     button .b -text update -command PreGen::Update 
     grid ... 
    } 

    proc AlistUpdated {args} { 
     # We just ignore the arguments; don't need them here 
     variable alist 
     .c configure -values $alist 
    } 

    proc Update ... 
} 

、あなたしかその名前空間内のプロシージャ内から変数を設定している場合、あなただけの直接適切なタイミングで.c configure -valuesを呼び出すことができます。それは私が実際にあなたがすることをお勧めするものです。

+0

ありがとうございます。それは本当に私に多くを学ばせてくれます! – Jimmy

関連する問題