Как правильно отследить событие мыши в ткинтере с сеткой - PullRequest
0 голосов
/ 16 июня 2019

Я не могу правильно отследить событие мыши в tkinter с управлением сеткой. Чтобы упростить вопрос, я привел простой пример того, что у меня есть. В основном, это окно tkinter с метками в сетке. По какой-то причине координаты мыши x и y увеличиваются только до ~ 100 (x) и ~ 100 (y) и сбрасываются до нуля. Координаты x и y должны доходить примерно до 0 - 200 для обоих. Потому что в окне должно быть 4 метки размером около 100х100 (пикселей). Короче говоря, кажется, что мышь отслеживает по сетке (метке), а не по всему окну.

import Tkinter as tk

SIZE = 2
root = tk.Tk()

def motion(event):
    x, y = event.x, event.y
    print('{}, {}'.format(x, y))

def create_labels():
    for r in range(SIZE):
        for c in range(SIZE):
            label = tk.Label(root,
                             text="",
                             bg="gray",
                             width=100,
                             height=50,
                             borderwidth=1,
                             font=("Helvetica", 1))

            label.grid(row=r, column=c)

create_labels()
root.bind('<Motion>', motion)
root.mainloop()

1 Ответ

2 голосов
/ 16 июня 2019

Из-за способа, которым tkinter выполняет события, привязка события к корневому окну автоматически связывает его с каждым окном. Когда ваша привязка срабатывает, event.x и event.y представляют координату x / y в виджете, который получает событие. Таким образом, при перемещении по каждой метке координаты относятся к этому виджету.

Если вы хотите получить координаты относительно корневого окна, используйте event.x_root и event.y_root.

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