5

コマンドオプションで変数を渡す際に問題が発生しました。次に例を示します。

package require Tk
wm withdraw .
destroy .button
toplevel .button

# button.0: puts 0
set count 0
button .button.$count -text $count -command {puts $count}
grid .button.$count -column $count -row 0

# button.1: puts 1
incr count
button .button.$count -text $count -command {puts $count}
grid .button.$count -column $count -row 0

ただし、button.0は0ではなく1を設定します。button.0が呼び出されると、その時点での変数の値である1を取得するようです。

プロシージャとグローバル変数を使用して目的の結果を達成できることはわかりましたが、プロシージャの呼び出しに頼らずにこれを達成できるかどうかを知りたいと思います。

前もって感謝します。

4

2 に答える 2

7

コールバックを定義するときに変数の現在の値を置き換えたい場合は、別の引用メカニズムを使用する必要があります。

button .button.$count -text $count -command [list puts $count]
于 2013-01-22T00:33:24.163 に答える
3

コードを使用して、コマンドをトリガーする 2 つのボタンを作成します。

puts $count

あなたの例では、ボタンを押すと、変数 $count は「1」に等しいため、この値を「入力」して表示します。適切に操作するには、2 つのボタンを作成する必要があります。最初のボタン コマンドは「puts 0」にする必要があります。2 番目のボタン コマンドは「puts 1」にする必要があります。ボタンを作成するときに置換を適用する必要があります。例えば:

-command [list puts $count]
-command "puts $count"
于 2013-01-22T11:06:52.747 に答える