Tk中checkbutton和button的联动

问题

@流吾思:

我想写个checkbutton和button组合的按键,当checkbutton被选中后,button才起作用,这个应该怎么写?

解答

proc link_button {check button} {
  set checked_value [uplevel #0 set [$check cget -variable]]
  set state_map {0 disabled 1 normal}
  set button_state [dict get $state_map $checked_value ]
  $button configure -state $button_state
}

pack [checkbutton .check -text "Check Me"]
pack [button .button -text "Click Me"]
.check configure -command "link_button .check .button"

.check select
.check invoke

代码说明:

  1. 获取checkbutton绑定的变量
  2. 获取该变量的值。需要借助uplevel在全局域中进行
  3. 根据该变量的值设置button的状态