例如,我想将按钮的值存储到变量中,因此我可以为所有三个按钮设置一个proc,并执行特定于每个变量值的操作,而无需重复代码。
button .buttonRed -text "Red" -command "popUpColor"
button .buttonBlue -text "Blue" -command "popUpColor"
button .buttonGreen -text "green" -command "popUpColor"
答案 0 :(得分:1)
让你的处理程序命令采用参数:
button .buttonRed -text "Red" -command "popUpColor red"
button .buttonBlue -text "Blue" -command "popUpColor blue"
button .buttonGreen -text "green" -command "popUpColor green"
proc popUpColor color {
...
}
请注意,引号不是字符串的语法,它们仅用于分组(有些引用:例如和
;
只是双引号内的文本字符)。所以这个
button .buttonRed -text "Red" -command "popUpColor red"
完全等于这个
button .buttonRed -text Red -command "popUpColor red"
您可以使用它来简化代码:
foreach color {Red Blue Green} {
button .button$color -text $color -command "popUpColor $color"
}
但请注意,如果插入列表值,将-command
选项的值构造为简单字符串可能会有问题。例如,
... -command "foo $bar"
如果$bar
是123
,那么就可以,但如果是{1 2 3}
,那么命令选项值将为foo 1 2 3
。
因此,始终将调用值构造为列表是个好主意:
... -command [list foo $bar]
变为foo {1 2 3}
。
所以你应该使用
button .buttonRed -text "Red" -command [list popUpColor red]
...
或
foreach color {Red Blue Green} {
button .button$color -text $color -command [list popUpColor $color]
}
尽管在这个例子中没有任何区别。
答案 1 :(得分:0)
找到另一种方式:
button .buttonRed -text "Red" -command "popUpColor .buttonRed"
button .buttonBlue -text "Blue" -command "popUpColor .buttonBlue"
button .buttonGreen -text "green" -command "popUpColor .buttonGreen"
proc whatcolor { color } {
#some code here
}
答案 2 :(得分:0)
正如答案所指出的那样,在命令字符串中添加参数是获得所需结果的方法,但您可能需要考虑使用单选按钮。如果你只想让一个选项可用,那么这是一个更好的控制,并且它有一个-textvariable选项,可以将结果存储在一个变量中,而无需编写辅助函数。