Je voudrais positionner à un endroit précis (le milieu d'un widget Frame) le pointeur de la souris.
Est-ce possible?
Je n'ai rien trouvé sur la toile, si ce n'est que récupérer les coordonnées du pointeur.
Je voudrais positionner à un endroit précis (le milieu d'un widget Frame) le pointeur de la souris.
Est-ce possible?
Je n'ai rien trouvé sur la toile, si ce n'est que récupérer les coordonnées du pointeur.
Salut,
Sous Windows il y a la fonction SetCursorPos : https://docs.microsoft.com/en-us/win...r-setcursorpos
Apparemment sous Python on peut l’utiliser avec le module win32api...
J'ai fait un teste et ça fonctionne mais le curseur se déplace sur l'écran...
Je n'ai pas testé sur une fenêtre tkinter, il y a peut-être un calcul de coordonnées à faire (changement de repère)...
Merci Beginner, je vais tester avec win32api
Bonsoir,
Certaines fonctionnalités de Tkinter sont parfois légèrement documentées.
Auquel cas, pour trouver des informations, il est intéressant de se tourner vers les origines de Tk : c'est à dire Tcl-Tk.
En se plongeant dans la documentation de event :
https://www.tcl.tk/man/tcl/TkCmd/event.htm
on peut en déduire l'exemple minimaliste ci-dessous pour Tkinter :
Avec la commande event_generate, on crée un événement <Motion> avec l'option warp.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 from Tkinter import * root = Tk() b = Button(root, text="ABCDEFGHIJKLMNOPQRSTUVWXYZ", command=root.destroy) b.pack() root.event_generate('<Motion>', warp=True, x=30, y=10) root.mainloop()
Le pointeur de la souris va se positionner par rapport au coin supérieur gauche à 30 pixels en x et 10 pixels en y.
Dans notre exemple, pour centrer le pointeur de la souris par rapport à la fenêtre, un calcul est nécessaire par rapport à ses dimensions (root.winfo_width() et root.winfo_height()).
J'avais vu et testé cette possibilité, mais, chez moi, le curseur ne bouge pas alors que setcursorpos fonctionne très bien.
Blog
Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
(Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)
Bonjour,
Effectivement, parfois cela ne fonctionne pas !
Auquel cas, il faut s'assurer que la fenêtre soit bien au 1er plan en faisant un focus dessus (root.focus_set()) juste avant d'appeler la méthode event_generate().
Salut,
Oui chez moi aussi cela ne fonctionnait pas ou plutôt on ne perçoit pas le déplacement car souvent on bouge la souris (pour exécuter le code par exemple) du coup soit on lance plusieurs déplacements à une certaine fréquence soit on utilise un bouton qui déplace le curseur lorsque l'on clique dessus soit...
Ca ne fonctionne toujours pas ...
Quelqu'un a-t-il la méthode pour "Moves the cursor to the specified screen coordinates" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 from tkinter import * root = Tk() root.geometry("500x500+400+100") root.focus_set() root.event_generate('<Motion>', warp=True, x=250, y=250) root.mainloop()
hello,
En envoyant l'événement une fois que la boucle principale est lancée cela fonctionnera certainement mieux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 from tkinter import * def CursorPosition(): root.event_generate('<Motion>', warp=True, x=250, y=250) root = Tk() root.geometry("500x500+400+100") root.focus_set() B = Button(root, text ="CursorPosition", command = CursorPosition) B.pack() root.mainloop()
Ami calmant, J.P
Partager