Existe-t-il un moyen d'obtenir la position de la souris et de la définir comme var?
Vous pouvez configurer un rappel pour réagir à <Motion>
événements:
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()
Je ne sais pas quel type de variable vous voulez. Ci-dessus, j'ai défini les variables locales x
et y
sur les coordonnées de la souris.
Si vous faites de motion
une méthode de classe, vous pouvez définir les attributs d'instance self.x
et self.y
aux coordonnées de la souris, qui pourraient alors être accessibles à partir d'autres méthodes de classe.
À tout moment, vous pouvez utiliser la méthode winfo_pointerx
et winfo_pointery
pour obtenir les coordonnées x, y par rapport à la fenêtre racine. Pour convertir cela en coordonnées d'écran absolues, vous pouvez obtenir le winfo_pointerx
ou winfo_pointery
, et de cela soustraire le respectif winfo_rootx
ou winfo_rooty
Par exemple:
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()
Personnellement, je préfère utiliser pyautogui
, même en combinaison avec Tkinter. Elle n'est pas limitée à l'application Tkinter, mais fonctionne sur tout l'écran, même sur une configuration double écran.
import pyautogui
x, y = pyautogui.position()
Si vous souhaitez enregistrer différentes positions, ajoutez un événement au clic.
Je sais que la question d'origine concerne Tkinter.
Je voudrais améliorer la réponse de Bryan, car cela ne fonctionne que si vous avez 1 moniteur, mais si vous avez plusieurs moniteurs, il utilisera toujours vos coordonnées par rapport à votre moniteur principal. afin de le trouver par rapport aux deux moniteurs, et d'obtenir la position précise, utilisez alors vroot
, au lieu de root
, comme ceci
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()