Я пытаюсь настроить последовательность контрольных кнопок, при нажатии они устанавливают значение переменной, связанную с этими кнопками, как 1. Кнопка запуска запускает только те проверки, для которых контрольная кнопка . Значение глобальной переменной, например: check_H1, не обновляется при нажатии кнопки.TCL: переменное значение не обновляется после нажатия кнопки checkbutton
#!/usr/local/bin/wish
package require Tk
frame .top -width 50 -height 30 -borderwidth 5 -padx 5 -pady 5 -relief raised
checkbutton .top.c1 -text H1 -variable "check_H1" -command {set_h1}
checkbutton .top.c2 -text H2 -variable "check_H2" -command {set_h2}
checkbutton .top.c3 -text H3 -variable "check_H3" -command {set_h3}
checkbutton .top.c4 -text H4 -variable "check_H4" -command {set_h4}
checkbutton .top.c5 -text H5 -variable "check_H5" -command {set_h5}
checkbutton .top.c6 -text H6 -variable "check_H6" -command {set_h6}
button .top.b1 -text "RUN" -command [list select $check_H1 $check_H2 $check_H3 $check_H4 $check_H5 $check_H6]
grid .top
grid .top.c1 -row 2 -column 2
grid .top.c2 -row 2 -column 3
grid .top.c3 -row 3 -column 2
grid .top.c4 -row 3 -column 3
grid .top.c5 -row 4 -column 2
grid .top.c6 -row 4 -column 3
grid .top.b1 -row 5 -column 5
proc select {check_H1 check_H2 check_H3 check_H4 check_H5 check_H6} {
#upvar check_H1 check_H2 check_H3 sa3 check_H4 sa4 check_H5 sa5 check_H6 sa6
puts "Value of H1 is $check_H1\n"
puts $check_H2
puts $check_H3
puts $check_H4
puts $check_H5
puts $check_H6
if {$check_H1 == 1} {
run_h1
}
if {$check_H2 ==1} {
run_h2
}
if {$check_H3 ==1} {
run_h3
}
if {$check_H4 ==1} {
run_h4
}
if {$check_H5 ==1} {
run_h5
}
if {$check_H6 ==1} {
run_h6
}
}
proc set_h1 {} {
global check_H1
set check_H1 1
puts $check_H1
puts "H1 is set\n"
}
proc set_h2 {} {
global check_H2
set check_H2 1
puts "H2 is set\n"
}
proc set_h3 {} {
global check_H3
set check_H3 1
puts "H3 is set\n"
}
proc set_h4 {} {
set check_H4 1
puts "H4 is set\n"
}
proc set_h5 {} {
set check_H5 1
puts "H5 is set\n"
}
proc set_h6 {} {
set check_H6 1
puts "H6 is set\n"
}
proc run_h1 {} {
global check_H1
puts "this loop is for H1\n"
}
proc run_h2 {} {
global check_H2
puts "this loop is for H2\n"
}
Понятное значение каждой переменной, если смотреть по выбору, фиксируется на значение переменной в момент нажатия кнопки. top.b1 был создан. –
Кроме того, вам не нужно писать обратный вызов, чтобы установить значение переменной checkbutton. Переменная будет обновлена, чтобы отобразить состояние кнопки. (Если вы не хотите делать то, что он делает: сделать кнопку невозможной для отмены выбора. Лучше отключить кнопку в этом случае.) –
Почему все различные процедуры 'set_' * отличаются друг от друга? –