有没有办法获取鼠标的位置并将其设置为 var?
问问题
78392 次
4 回答
43
您可以设置一个回调来响应<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
鼠标坐标,然后可以从其他类方法访问。
于 2014-04-08T00:53:36.697 回答
41
在任何时间点,您都可以使用该方法winfo_pointerx
并winfo_pointery
获取相对于根窗口的 x,y 坐标。要将其转换为绝对屏幕坐标,您可以获得winfo_pointerx
or winfo_pointery
,并从中减去相应的winfo_rootx
orwinfo_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()
于 2014-04-08T16:45:38.050 回答
5
就个人而言,我更喜欢使用pyautogui
,即使与 Tkinter 结合使用。它不仅限于 Tkinter 应用程序,而是在整个屏幕上工作,甚至在双屏配置下。
import pyautogui
x, y = pyautogui.position()
如果您想保存各种位置,请添加点击事件。
我知道最初的问题是关于 Tkinter 的。
于 2018-05-29T02:47:13.687 回答
5
我想改进 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()
于 2019-04-04T12:06:31.120 回答