Кнопка остается нажатой после нажатия "ОК" или "Отмена" в 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
Другие вопросы по тегам