Скрипт Tcl/Tk для создания кнопки, которая меняет цвет при нажатии?

Просто делаю очень простую программу Tcl/Tk для изучения, но у меня возникли небольшие проблемы.

Мне нужно, чтобы кнопка переключала цвета при нажатии, чтобы она начиналась красной, при нажатии она становилась зеленой, а при повторном нажатии возвращалась к красной.

У меня он меняется с красного на зеленый, но я не знаю, как заставить его вернуться в другую сторону. Как лучше всего это сделать?


person Nick Duffell    schedule 08.05.2012    source источник


Ответы (1)


Это не очень сложно (за исключением OSX, где такие вещи напрямую противоречат правилам пользовательского интерфейса платформы), вам просто нужно использовать подходящий обратный вызов:

button .b -background red -command [list toggleTheButton .b]
set state(.b) 1
proc toggleTheButton w {
    global state
    if {$state($w)} {
        $w configure -background green
    } else {
        $w configure -background red
    }
    set state($w) [expr {!$state($w)}]
}

Рассмотрите возможность использования checkbutton вместо этого, когда вам нужно переключение, так как это будет гораздо быстрее понято пользователями.

person Donal Fellows    schedule 08.05.2012
comment
Обратите внимание, что toggleTheButton будет работать с любым количеством кнопок. Просто сделайте кнопку, как показано (но, конечно, с другим именем) и инициализируйте состояние. - person Donal Fellows; 08.05.2012
comment
Огромное спасибо. Да, я понимаю проблемы с этим, но именно так это должно быть сделано для этого конкретного приложения. - person Nick Duffell; 09.05.2012