如何将鼠标绑定到所有比例小部件?

时间:2019-05-23 08:36:15

标签: tcl scale ttk

我正在开发TCL TK上的表单生成器。 我将鼠标移动绑定到所有Scale小部件。

我生成一个比例小部件:

grid [ttk::scale .frm.fgs_$name -length $length -from -100 -to 100 ] -column 2 -row $row -sticky w

我尝试了无效的绑定:

bind Scale <B1-Motion> {puts "Scale: %W"}

<Leave>事件也不起作用。

2 个答案:

答案 0 :(得分:0)

这是一个对我有用的例子:

bind   .c <Motion> {displayXY .info %x %y}

您需要绑定一个进程。通常您需要重新缩放 光标的移动。在这种情况下,我创建一个游标 那是一条横过Y轴的水平刻度线:

proc displayXY {w cx cy} {

  set x [expr {floor(double(($cx-$::dx)/50.))}]
  set y [expr {double((-$cy+$::dy))}]
  set ::cursorPosition [format "x=%.2f y=%.2f" $x $y]

  # remove old cursor "line"
  .c delete yTrace 

  ....much Cartesian math....

  # redraw new cursor "line"
  if { $y1 > -250   }  { 
    .c create line  $x1      $y1      $x2       $y2   -width 3  -fill grey60 -tags "yTrace"
    .c scale yTrace   0        0        1        -1
    } 

}

答案 1 :(得分:0)

通常,绑定到窗口小部件类很棘手,因为它会影响该窗口小部件的所有用户,包括库代码中的用户。不建议这样做,至少不与现有的窗口小部件类一起使用。 (相反,如果要创建自己的窗口小部件类,这是一个很好的主意。)对于普通用户代码,最好绑定到窗口小部件名称:

bind .frm.fgs_$name <B1-Motion> {puts "Scale: %W"}

或者绑定到新的绑定标签并安装它:

# You're advised to begin custom binding tags with a lower-case letter
bind myScale <B1-Motion> {puts "Scale: %W"}
# Install after the instance-level bindings but before the class-level bindings
bindtags .frm.fgs_$name [linsert [bindtags .frm.fgs_$name] 1 myScale]

您的直接问题是ttk::scale使用类名TScale。它还具有一个现有的<B1-Motion>绑定。