一段时间后更改按钮的颜色 tcl tk

changing the color of button after some time tcl tk

我想在一段时间后更改单选按钮的颜色。 这是我试过的代码,

set field1 [radiobutton .field1 -disabledforeground green -state "disabled" ]
set field2 [radiobutton .field2 -disabledforeground red -state "disabled"]
set field3 [radiobutton .field3 -disabledforeground green -state "disabled"]

grid $field1 -row 0 -column 0
grid $field2 -row 0 -column 1
grid $field3 -row 0 -column 2

after 2000
$field1 configure -disabledforeground red
grid $field1 -row 0 -column 0

Window改变颜色后才打开

如何在运行时间内动态看到颜色的变化?

这似乎可以解决问题。不过,我不确定这是否是最好的方法。

set field1 [radiobutton .field1 -disabledforeground green -state disabled]
set field2 [radiobutton .field2 -disabledforeground red -state disabled]
set field3 [radiobutton .field3 -disabledforeground green -state disabled]

grid $field1 $field2 $field3

bind .field1 <Map> [list after 2000 {changeDisabledColor %W red}]

proc changeDisabledColor {w color} {
    $w configure -disabledforeground $color
}

对此的几点思考:

  1. after 2000 表示命令在返回前休眠两秒,在此期间,gui 没有响应。 after 2000 script 表示命令 returns 在安排事件发生后立即在两秒内发生。

  2. 当 window 被添加到要显示的 windows 集合时,window 触发 Map 事件,但在此之前它的大小和位置是计算出来的。 AFAICT 如果想要对 window.

  3. 的外观进行一些配置,这是一个很好的事件。
  4. .field1 <Map> 的处理程序不一定是对命令过程的调用:bind .field1 <Map> [list after 2000 {%W configure -disabledforeground red}] 也应该有效。在我的示例中使用调用通常是个好主意,因为以后构建通常更方便。

文档:after, bind, grid, list, radiobutton, set