我在命令选项上传递变量时遇到问题,例如:
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
然而按钮。0表示1而不是0。好像按下了按钮。它取变量在那一刻的值,也就是1。
我知道我可以使用过程和全局变量来实现期望的结果,但我想知道是否有可能在不诉诸过程调用的情况下实现这一点。
提前感谢。
如果您想在定义回调时替换变量的当前值,则需要使用不同的引用机制:
button .button.$count -text $count -command [list puts $count]
用你的代码创建两个触发命令的按钮:
puts $count
在您的示例中,当您按下按钮时,变量$count等于"1",因此"put "并显示此值。为了正确操作需要创建2个按钮。第一个按钮命令应该是"puts 0"。第二个按钮命令应该是"put 1"。我们必须在创建按钮时应用替换。例如:
-command [list puts $count]
-command "puts $count"