有没有办法获取鼠标的位置并将其设置为var?
答案 0 :(得分:20)
您可以设置回调以对<Motion>
事件作出反应:
import Tkinter as tk
root = tk.Tk()
def motion(event):
x, y = event.x, event.y
print('{}, {}'.format(x, y))
root.bind('<Motion>', motion)
root.mainloop()
我不确定你想要什么样的变量。在上面,我将局部变量x
和y
设置为鼠标坐标。
如果你使motion
成为一个类方法,那么你可以将实例属性self.x
和self.y
设置为鼠标坐标,然后可以从其他类方法访问它们。
答案 1 :(得分:20)
在任何时候,您都可以使用方法winfo_pointerx
和winfo_pointery
来获取相对于根窗口的x,y坐标。要将其转换为绝对屏幕坐标,您可以获取winfo_pointerx
或winfo_pointery
,然后从中减去相应的winfo_rootx
或winfo_rooty
例如:
root = tk.Tk()
...
x = root.winfo_pointerx()
y = root.winfo_pointery()
abs_coord_x = root.winfo_pointerx() - root.winfo_rootx()
abs_coord_y = root.winfo_pointery() - root.winfo_rooty()
答案 2 :(得分:0)
就个人而言,我更喜欢使用pyautogui
,即使与Tkinter结合使用。它不仅限于Tkinter应用程序,但可以在整个屏幕上工作,即使在双屏幕配置上也是如此。
import pyautogui
x, y = pyautogui.position()
如果您想保存各种位置,请添加点击事件 我知道原始问题是关于Tkinter。
答案 3 :(得分:0)
我想改善Bryan的答案,因为这只有在您有1个监视器的情况下才有效,但是如果您有多个监视器,它将始终使用相对于主监视器的坐标。为了找到相对于两个显示器的位置并获得准确的位置,请使用vroot
而不是root
,像这样
root = tk.Tk()
...
x = root.winfo_pointerx()
y = root.winfo_pointery()
abs_coord_x = root.winfo_pointerx() - root.winfo_vrootx()
abs_coord_y = root.winfo_pointery() - root.winfo_vrooty()