IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Positionner précisément le pointeur de la souris dans la fenêtre principale de tkinter


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 91
    Points : 52
    Points
    52
    Par défaut Positionner précisément le pointeur de la souris dans la fenêtre principale de tkinter
    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.

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 889
    Points : 3 728
    Points
    3 728
    Par défaut
    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)...

  3. #3
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 91
    Points : 52
    Points
    52
    Par défaut
    Merci Beginner, je vais tester avec win32api

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 345
    Points : 530
    Points
    530
    Par défaut
    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 :

    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()
    Avec la commande event_generate, on crée un événement <Motion> avec l'option warp.
    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()).

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 889
    Points : 3 728
    Points
    3 728
    Par défaut
    Salut,

    C'est bien vu Canvas...

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    J'avais vu et testé cette possibilité, mais, chez moi, le curseur ne bouge pas alors que setcursorpos fonctionne très bien.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 345
    Points : 530
    Points
    530
    Par défaut
    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().

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 889
    Points : 3 728
    Points
    3 728
    Par défaut
    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...

  9. #9
    Membre à l'essai Avatar de Falenn
    Femme Profil pro
    Prise de tête
    Inscrit en
    Mars 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Prise de tête

    Informations forums :
    Inscription : Mars 2021
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Canvas Voir le message
    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().
    Ca ne fonctionne toujours pas ...

    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()
    Quelqu'un a-t-il la méthode pour "Moves the cursor to the specified screen coordinates" ?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Citation Envoyé par Falenn Voir le message
    Quelqu'un a-t-il la méthode pour "Moves the cursor to the specified screen coordinates" ?
    Si le côté Tk ne fonctionne pas, vous pouvez toujours passez "à côté" en fonction de l'environnement système (et "comment" se trouve dans de nombreux articles sur Internet).

    - W

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 039
    Points : 9 447
    Points
    9 447
    Par défaut
    hello,
    Citation Envoyé par Falenn Voir le message
    Ca ne fonctionne toujours pas ...

    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()
    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()
    Nom : CursorPosition.gif
Affichages : 1207
Taille : 12,9 Ko

    Ami calmant, J.P

  12. #12
    Membre à l'essai Avatar de Falenn
    Femme Profil pro
    Prise de tête
    Inscrit en
    Mars 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Prise de tête

    Informations forums :
    Inscription : Mars 2021
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    En effet, Porcinet, ça marche !!!

Discussions similaires

  1. Position souris dans une figure
    Par yabbiyou dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 12/01/2010, 15h21
  2. position due la souris dans le richtextbox
    Par TaymouWan dans le forum Windows Forms
    Réponses: 11
    Dernier message: 01/04/2009, 15h40
  3. Détecter la position de la souris dans une fonction
    Par polemoss dans le forum jQuery
    Réponses: 5
    Dernier message: 19/03/2009, 09h28
  4. Position de la souris dans un Memo
    Par greg778 dans le forum Delphi
    Réponses: 17
    Dernier message: 27/11/2006, 21h32
  5. Position de la souris dans une form
    Par planetevoyage dans le forum Delphi
    Réponses: 3
    Dernier message: 12/10/2006, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo