2016-10-21 4 views
0

Я пытаюсь настроить последовательность контрольных кнопок, при нажатии они устанавливают значение переменной, связанную с этими кнопками, как 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" 
} 
+1

Понятное значение каждой переменной, если смотреть по выбору, фиксируется на значение переменной в момент нажатия кнопки. top.b1 был создан. –

+1

Кроме того, вам не нужно писать обратный вызов, чтобы установить значение переменной checkbutton. Переменная будет обновлена, чтобы отобразить состояние кнопки. (Если вы не хотите делать то, что он делает: сделать кнопку невозможной для отмены выбора. Лучше отключить кнопку в этом случае.) –

+1

Почему все различные процедуры 'set_' * отличаются друг от друга? –

ответ

2

При запуске скрипта он чувствует, что многие вещи не работают, как я думаю, это было предназначено. Я изменил несколько вещей и удалил переменные из команды button, так как переменные передаются в команду, которая должна запускаться в начале, а не в том месте, где нажата кнопка.

Я также удалил все set check_HX 1, потому что они вынуждают контрольную кнопку в одно состояние. Тем не менее, я не касался других функций.

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 select 
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 {} { 
    global check_H1 check_H2 check_H3 check_H4 check_H5 check_H6 
    puts "Value of H1 is $check_H1" 
    puts "Value of H2 is $check_H2" 
    puts "Value of H3 is $check_H3" 
    puts "Value of H4 is $check_H4" 
    puts "Value of H5 is $check_H5" 
    puts "Value of H6 is $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 
    puts "H1 is set to $check_H1" 
} 

proc set_h2 {} { 
    global check_H2 
    puts "H2 is set to $check_H2" 
} 

proc set_h3 {} { 
    global check_H3 
    puts "H3 is set to $check_H3" 
} 

proc set_h4 {} { 
    global check_H4 
    puts "H4 is set to $check_H4" 
} 

proc set_h5 {} { 
    global check_H5 
    puts "H5 is set to $check_H5" 
} 

proc set_h6 {} { 
    global check_H6 
    puts "H6 is set to $check_H6" 
} 

proc run_h1 {} { 
    global check_H1 
    puts "This loop is for H1 $check_H1" 
} 

proc run_h2 {} { 
    global check_H2 
    puts "this loop is for H2 $check_H2" 
} 

proc run_h3 {} { 
    global check_H3 
    puts "this loop is for H3 $check_H3" 
} 

proc run_h4 {} { 
    global check_H4 
    puts "this loop is for H4 $check_H4" 
} 

proc run_h5 {} { 
    global check_H5 
    puts "this loop is for H5 $check_H5" 
} 

proc run_h6 {} { 
    global check_H6 
    puts "this loop is for H6 $check_H6" 
} 
+0

Похоже, основное изменение было в кнопке RUN и выборе proc, да? –

+0

Да, спасибо Джерри и Гленн, я понял, что в последнее время этот список больше не требуется, и с небольшими изменениями я смог запустить, я понимаю, что мне не нужно, так что может установить_ proc, но тогда я могу отказаться от опции -command checkbuttons , если да, то мне это не нужны, поэтому я могу установить * procs, я могу запросить только переменную –

+0

@glennjackman yes, те и помехи 'set' в procs. – Jerry

Смежные вопросы