Я программист на Фортране, но теперь мне нужно поддерживать графический интерфейс, написанный на Tcl / Tk, который управляет кодом на Фортране (общение с ним через сокет), но я очень мало знаю о tcl.
МойПрограмма Fortran отправляет XML в GUI о состоянии ошибки, и это отображается в диалоговом окне с использованием кода, показанного ниже:
body Processingwizard::updateProcessingData { a_param_class a_dom } {
# Check on status of task
set status_code [$a_dom selectNodes string(/integration_postrefinement/status/code)]
if {$status_code == "error"} {
.m confirm \
-title "Error" \
-type "1button" \
-text "Integration post-refinement failed, sorry.\n[$a_dom selectNodes string(/integration_postrefinement/status/message)]" \
-button1of1 "Dismiss"
} else {
....
Где подтверждение определяется как:
body Dialog::confirm {} {
centreOnScreen
wm deiconify $itk_component(hull)
raise $itk_component(hull)
grabber set $itk_component(hull)
#bind $itk_component(hull) <ButtonRelease-1> [list raise $itk_component(hull)]
tkwait variable [scope responses($this)]
#bind $itk_component(hull) <ButtonRelease-1> { }
grabber release $itk_component(hull)
wm withdraw $itk_component(hull)
return $responses($this)
}
у меня проблема заключается в том, что в результате другого XML, который отправляется в GUI, он открывает другое диалоговое окно с другим предупреждающим сообщением, а открытие второго диалогового окна закрывает первое, поэтому пользователь не видит первыйпредупреждение.Второе диалоговое окно открывается с помощью приведенного ниже кода.
Есть ли способ, которым я могу остановить закрытие первого диалогового окна, если пользователь фактически не нажал кнопку "Отклонить"?Я думал, что «tkwait» в методе «подтвердить» может сделать это, но это не так.
# Warn the user
.m configure \
-type "3button" \
-title "Doubtful refinement" \
-text "The following parameters have refined to physically questionable values:\n\n$messages\" \
-button1of3 "Reset" \
-button2of3 "Always" \
-button3of3 "Once" \
-buttontext "Ignore (in this Session only) "
set choice [.m confirm]
if {$choice == 2} {
resetDetectorCrystalParams
} elseif {$choice == 1} {
set alwaysignore 0
} else {
set alwaysignore 1
}