Пусть ваша команда обработчика принимает параметр:
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]
}
, хотя в данном примере это не имеет значения.