我想在一段时间后改变单选按钮的颜色。 这是我试过的代码,
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
只有在更改颜色后才会打开窗口。
如何在运行时动态查看颜色变化?
答案 0 :(得分:4)
这似乎可以解决问题。不过,我不确定它是否是最佳方式。
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
}
对此有一些想法:
after 2000
表示命令在返回之前会休眠两秒钟,在此期间,gui没有响应。 after 2000
脚本表示在两秒钟内安排事件后,该命令会立即返回。
当窗口被添加到要显示的窗口组时,会触发窗口Map
事件,但在此窗口之前会计算其大小和位置。 AFAICT如果想要将某些配置计时到窗口的外观,这是一个很好的事件。
.field1 <Map>
的处理程序不必是对命令过程的调用:bind .field1 <Map> [list after 2000 {%W configure -disabledforeground red}]
也应该有效。在我的例子中使用调用通常是个好主意,因为以后构建通常会更方便。