Кнопка остается нажатой после нажатия "ОК" или "Отмена" в tk_messagebox
Я использую tk_messageBox
для ok-cancel
всплывающее информационное сообщение. Сообщение появляется при нажатии на определенную кнопку Run
, но после нажатия на ok
или же cancel
во всплывающем информационном сообщении Run
Кнопка удерживается нажатой (как показано на прикрепленном изображении), хотя включена, вы можете нажать на нее снова, как обычно. Я хочу, чтобы он вернулся к нормальному состоянию, а не давил?
1 ответ
Проблема заключается в том, что вы запускаете задачу на переднем плане без обработки обновлений пользовательского интерфейса, которые необходимы для обновления вида кнопки. Вы, вероятно, должны настроить кнопку "Выполнить", чтобы отключить (-state disabled
) и бегать update
сразу же после этого пользовательский интерфейс будет синхронизирован с внутренним состоянием (вы устанавливаете состояние кнопки как отключенное, чтобы не обрабатывать несколько кликов одновременно). Затем, когда задача завершится, вы вернете состояние в нормальное состояние.
Это не так уж сложно, но гораздо проще, если у вас есть вспомогательная процедура, например, такая:
proc doProcessing {} {
.runButton configure -state disabled
update
doTheLongProcessing
.runButton configure -state normal
}
button .runButton -text Run -command {
if {[tk_messageBox -type okcancel -message "is it ok?"] eq "ok"} {
doProcessing
}
}
pack .runButton