鼠标位置Python Tkinter

时间:2014-04-08 00:39:51

标签: python tkinter mouse-pointer

有没有办法获取鼠标的位置并将其设置为var?

4 个答案:

答案 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()

我不确定你想要什么样的变量。在上面,我将局部变量xy设置为鼠标坐标。

如果你使motion成为一个类方法,那么你可以将实例属性self.xself.y设置为鼠标坐标,然后可以从其他类方法访问它们。

答案 1 :(得分:20)

在任何时候,您都可以使用方法winfo_pointerxwinfo_pointery来获取相对于根窗口的x,y坐标。要将其转换为绝对屏幕坐标,您可以获取winfo_pointerxwinfo_pointery,然后从中减去相应的winfo_rootxwinfo_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()