Как определить, где произошло нажатие кнопки - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь реализовать довольно простое перетаскивание, чтобы позволить пользователю щелкнуть ярлык и перетащить его текст на другой ярлык.

У меня есть кнопка вниз и перетащитьвсе работает хорошо, но я не могу понять, как определить, на какой метке закончилось перетаскивание.Я связался с событием для целевой метки, но когда срабатывает привязка, %W - это метка, на которой кнопка была нажата изначально.

Следующий код иллюстрирует эффект:

proc buttonRelease w {puts stdout ButtonRelease\ $w}
proc buttonPress w {puts stdout ButtonPress\ $w}
ttk::label .a -text a
ttk::label .b -text b
grid .a -row 0 -column 0 -sticky nsew -padx 30 -pady 15
grid .b -row 0 -column 1 -sticky nsew -padx 30 -pady 15
bind .a <ButtonPress> {buttonPress %W}
bind .b <ButtonPress> {buttonPress %W}
bind .a <ButtonRelease> {buttonRelease %W}
bind .b <ButtonRelease> {buttonRelease %W}

Если я нажимаю «а», я вижу

ButtonPress .a
ButtonRelease .a

, но если я перетаскиваю из «а» в «b», я вижу то же самое.Я хотел бы видеть

ButtonPress .a
ButtonRelease .b

Как мне это получить?

1 Ответ

0 голосов
/ 03 апреля 2019

Событие <ButtonRelease> всегда доставляется в виджет, которому было доставлено соответствующее событие <ButtonPress>;Сама система управления окнами выполняет эту задачу.Вместо этого вам нужно получить глобальные координаты X / Y (%X и %Y подстановки в событии) и использовать winfo containing, чтобы определить, какой виджет был в этом месте.

...