Как сохранить значение нажатия кнопки? - PullRequest
0 голосов
/ 12 июня 2018

Например, я хочу сохранить значение нажатия кнопки в переменную, чтобы я мог иметь одну процедуру для всех трех кнопок и выполнять операции, специфичные для каждого значения переменной, без дублирования кода.

button .buttonRed -text "Red" -command "popUpColor"
button .buttonBlue -text "Blue" -command "popUpColor" 
button .buttonGreen -text "green" -command "popUpColor"

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Найден альтернативный способ:

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
}
0 голосов
/ 13 июня 2018

Добавление параметров в командную строку, как указывалось в ответах, - это способ получить требуемый результат, но вы, возможно, захотите использовать вместо него радиокнопку.Это лучший контроль, если вы хотите иметь только одну доступную опцию из нескольких, и у нее есть опция -textvariable для сохранения результата в переменной без необходимости писать вспомогательную функцию.

0 голосов
/ 12 июня 2018

Пусть ваша команда обработчика принимает параметр:

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]
}

, хотя в данном примере это не имеет значения.

...