我正在开发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>
事件也不起作用。
答案 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>
绑定。