在使用网格管理的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()
答案 0 :(得分:2)
由于tkinter进行事件的方式,将事件绑定到根窗口会自动将其绑定到每个窗口。当绑定触发时,event.x
和event.y
代表获取事件的小部件的 中的x / y坐标。因此,当您在每个标签上移动时,坐标是相对于该小部件的。
如果要获取相对于根窗口的坐标,请使用event.x_root
和event.y_root
。