我无法用网格管理正确跟踪tkinter中的鼠标事件。为了简化这个问题,我给出了一个简单的例子。基本上,它是一个在网格中带有标签的平移窗口。但是,由于某种原因,鼠标x和y坐标仅上升到~100 (x)和~100 (y),并将其重置为零。X和y坐标都应该在0- 200左右。因为窗口应该有4个标签,大约有100x100 (像素)。简而言之,鼠标似乎在跟踪每个网格(标签),而不是整个窗口。
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()
发布于 2019-06-16 06:55:12
由于tkinter处理事件的方式,将事件绑定到根窗口会自动将其绑定到每个窗口。当绑定触发时,event.x
和event.y
表示获取事件的小部件中的x/y坐标。因此,当您在每个标签上移动时,坐标是相对于该小部件的。
如果要获取与根窗口相关的坐标,请使用event.x_root
和event.y_root
。
https://stackoverflow.com/questions/56619276
复制相似问题