如何在 tcl/tk 中绑定一些变量值?
How to bind some variable value in tcl/tk?
假设我们有一些变量 x,最初 x=0。
每当 x 将其值从 0 更改为 1 时,单击某个按钮 A
每当 x 将其值从 1 更改为 2 时,单击某个按钮 B
每当 x 将其值从 2 更改为 0 时,单击某个按钮 C
...
怎么做?
这是一个简单的示例,每秒更新一次 x
,并在变量上使用 trace
以在更新时调用按钮按下,具体按钮取决于新值。
#!/usr/bin/env wish
grid [ttk::button .a -text A -command {puts "Buttom A pushed"} -state active]
grid [ttk::button .b -text B -command {puts "Button B pushed"}]
grid [ttk::button .c -text C -command {puts "Button C pushed"}]
set x 0
proc update_gui {name _ _} {
upvar $name v
switch -- $v {
0 { .c state !active; .a state active; .a invoke }
1 { .a state !active; .b state active; .b invoke }
2 { .b state !active; .c state active; .c invoke }
}
}
proc update_x {} {
variable x
set x [expr {($x + 1) % 3}]
after 1000 update_x
}
trace add variable x write update_gui
after 1000 update_x
假设我们有一些变量 x,最初 x=0。
每当 x 将其值从 0 更改为 1 时,单击某个按钮 A
每当 x 将其值从 1 更改为 2 时,单击某个按钮 B
每当 x 将其值从 2 更改为 0 时,单击某个按钮 C
...
怎么做?
这是一个简单的示例,每秒更新一次 x
,并在变量上使用 trace
以在更新时调用按钮按下,具体按钮取决于新值。
#!/usr/bin/env wish
grid [ttk::button .a -text A -command {puts "Buttom A pushed"} -state active]
grid [ttk::button .b -text B -command {puts "Button B pushed"}]
grid [ttk::button .c -text C -command {puts "Button C pushed"}]
set x 0
proc update_gui {name _ _} {
upvar $name v
switch -- $v {
0 { .c state !active; .a state active; .a invoke }
1 { .a state !active; .b state active; .b invoke }
2 { .b state !active; .c state active; .c invoke }
}
}
proc update_x {} {
variable x
set x [expr {($x + 1) % 3}]
after 1000 update_x
}
trace add variable x write update_gui
after 1000 update_x