如何在Tkinter中使用网格正确跟踪鼠标事件

时间:2019-06-16 13:27:24

标签: python tkinter

在使用网格管理的tkinter中,我无法正确跟踪鼠标事件。为了简化问题,我生成了一个简单的示例。基本上,它是一个带有网格标签的tkinter窗口。但是由于某种原因,鼠标的x和y坐标仅上升到〜100(x)和〜100(y)并重置为零。两者的x和y坐标都应在0-200左右。因为窗口应具有约100x100(像素)的4个标签。简而言之,鼠标似乎在跟踪每个网格(标签),而不是整个窗口。

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 个答案:

答案 0 :(得分:2)

由于tkinter进行事件的方式,将事件绑定到根窗口会自动将其绑定到每个窗口。当绑定触发时,event.xevent.y代表获取事件的小部件的 中的x / y坐标。因此,当您在每个标签上移动时,坐标是相对于该小部件的。

如果要获取相对于根窗口的坐标,请使用event.x_rootevent.y_root