Как привязать мышку к масштабному виджету? - PullRequest
0 голосов
/ 23 мая 2019

Я разрабатываю генератор форм на 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 голосов
/ 23 мая 2019

Как правило, связывание с классом виджета сложно, поскольку оно затрагивает всех пользователей этого виджета, включая тех, которые находятся в коде библиотеки.Это не рекомендуется, по крайней мере, не с существующими классами виджетов.(Напротив, это очень хорошая идея, если вы создаете свой собственный класс виджетов.) Для обычного пользовательского кода лучше либо привязать имя виджета:

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>.

0 голосов
/ 23 мая 2019

Это пример, который работал для меня:

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
    } 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...