如何在Tkinter中获取窗口内鼠标坐标并实现标签跟随?
解决Tkinter标签跟随窗口内鼠标位置的问题
问题分析
当鼠标移动到窗口内的子组件上时,e.x/e.y会返回相对于该子组件的坐标而非主窗口;e.x_root/e.y_root是桌面全局坐标,无法直接对应窗口内的位置,这导致标签无法准确跟随窗口内的鼠标位置。
解决方案
通过主窗口的winfo_rootx()和winfo_rooty()方法获取窗口左上角的全局坐标,用鼠标的全局坐标减去这两个值,就能得到鼠标在主窗口内的相对坐标。修改后的代码如下:
from tkinter import * def customMouse(e=None): # 计算鼠标在主窗口内的相对坐标 x = e.x_root - root.winfo_rootx() y = e.y_root - root.winfo_rooty() label.place_configure(x=x, y=y-20) root = Tk() label = Label(master=root, text="^") label.place(x=0, y=0) root.bind('<Motion>', customMouse) root.mainloop()
说明
root.winfo_rootx():返回主窗口左上角在桌面的全局X坐标root.winfo_rooty():返回主窗口左上角在桌面的全局Y坐标- 用
e.x_root - root.winfo_rootx()得到鼠标在主窗口内的X偏移量,同理得到Y偏移量,这样无论鼠标在窗口内哪个组件上,都能获取到相对于主窗口的正确位置。
内容的提问来源于stack exchange,提问作者Sarim09
相关产品推荐
相关产品推荐

