如何在tcl/tk中使用鼠标指针高亮显示对象?

如何在tcl/tk中使用鼠标指针高亮显示对象?,tcl,tk,Tcl,Tk,我想绑定一个对象,当鼠标指针指向它时,它会高亮显示 .c bind $object <Enter> [list %W itemconfigure $object -width 4] .c绑定$object[列表%W项配置$object-宽度4] 但是,当鼠标指针离开时,如何自动将其更改为上一阶段?您可以绑定事件以撤消更改: .c bind $object <Leave> [list %W itemconfigure $object -width 1] .c绑定$

我想绑定一个对象,当鼠标指针指向它时,它会高亮显示

  .c bind $object <Enter> [list %W itemconfigure $object -width 4]
.c绑定$object[列表%W项配置$object-宽度4]
但是,当鼠标指针离开时,如何自动将其更改为上一阶段?

您可以绑定
事件以撤消更改:

.c bind $object <Leave> [list %W itemconfigure $object -width 1]
.c绑定$object[列表%W项配置$object-宽度1]
如果有具有不同线宽的对象,则需要将以前的宽度存储在某个位置,或将
事件绑定到适当的宽度:

.c bind $object <Enter> [subst {
    %W bind <Leave> [list %W itemconfigure $object -width [%W itemcget -width]]
    %W itemconfigure $object -width 4
}]
.c绑定$object[subst]{
%W绑定[列表%W项配置$对象-宽度[%W项集-宽度]]
%W itemconfigure$object-宽度4
}]

您可以多次调用此子例程以终止此操作:

proc highlightView {object} {
  .c bind $object <Enter> [list %W itemconfigure $object -width 4]
  .c bind $object <Leave> [list %W itemconfigure $object -width [.c itemcget $object -width]]
}

由于Tk保证最多有一个画布项目是当前的(即,已被
ed),因此只需将值存储在全局变量中就足够了。感谢Slebetman先生,经过一些修改后,它就可以工作了。但是你的想法非常有用。
 proc highlightView {object} {
  .c bind $object <Enter> [list %W itemconfigure $object -fill red]
  .c bind $object <Leave> [list %W itemconfigure $object -fill [.c itemcget $object -fill]]
}