web-dev-qa-db-fra.com

Position de la souris Python Tkinter

Existe-t-il un moyen d'obtenir la position de la souris et de la définir comme var?

16
Kyle Pfromer

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.

22
unutbu

À 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()
24
Bryan Oakley

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.

1
JOM

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()
0
Tyler Silva