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

Python Discussion :

Gestion du clavier


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Gestion du clavier
    Bonjour à tous,
    Je poursuis mon apprentissage, je progresse bien, mais là je bute.

    Je suis à la recherche d'une fonction qui peut me retourner la touche clavier qu'un utilisateur aurait appuyé (à la maniere d'un inkey$ du basic des années 80)
    Si l'utilsateur n'a pas appuyer sur la touche défini par l'appli, on poursuit l'application. (dos shell)

    J'ai beau parcourir, la doc et les différents forums, impossible de mettre la main là-dessus.

  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    je vais peut etre dire une connerie mais tu devrai aller voir du coté de pyHook, une bibliothèque pour gérer les évenement clavier et souris.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Merci

    J'ai du avoir le nez un dixaine de fois dessus sans le voir !!!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Je ne m'en sort pas avec le pyhook.

    J'ai regarder le 'exemple.py' fourni avec, il ne me trouve pas le module pythoncom (et moi non plus). ce module est-il vraiment necessaire ?

    J'ai juste besoin dans une grande boucle while 1:
    de vérifier si l'utilisateur appuye sur la touche 'e'
    pour modifier ensuite par un raw_input un parametre dans cette boucle.

    l'appli tourne avec de dos shell et sera compilé avec py2exe.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut il te faut installer pythonwin32all
    c'est marqué sur la page pyhook, et tu as le lien qu'il faut !
    ensuite ça marche très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    import pythoncom, pyHook
     
    def OnKeyboardEvent(event):
        if event.Ascii==101:
            print 'e sais au clavier OK'
            return True
        else:
            print "other character"
            return False
     
    # create a hook manager
    hm = pyHook.HookManager()
    # watch for all keyboardsevents
    hm.KeyDown = OnKeyboardEvent
    # set the hook
    hm.HookKeyboard()
    # wait forever
    pythoncom.PumpMessages()
    exécute ce fichier et tapotes sur ton clavier

    @++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    ok, j'ai trouvé ici :
    https://sourceforge.net/project/show...ease_id=403008

    Bon, maintenent, il faut que je résolve le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # wait forever
    pythoncom.PumpMessages()
    par
    # don't wait if i not press the keyboard
    ???

    (comme un bête A$=inkey$ retourne une chaine vide en basic, sans attendre la fin des temps )

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 89
    Points : 107
    Points
    107
    Par défaut Oullah je crois qu'on s'est pas bien compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # wait forever
    pythoncom.PumpMessages()
    te permets d'intercepter en continu les frappes au clavier.
    C'est pour ça que tu écoute via COM de windows les évènements clavier.

    maintenant si tu voulais juste avoir confirmation que l'utilisateur veut vraiment continuer en lui posant par exemple une seule fois la question alors un simple raw_iput suffit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    key = raw_input("""tapez "e" pour stopper \
    n'importe quelle autre touche pour continuer \n""")
     
    if key=='e':
        print "l'utilisateur veut qu'on stoppe"
    else:
        print "on continue"

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour ton bon coup de main.

    Mais cela n'est pas tout à fait ça.
    Comme je l'explique au premier post.

    - L'utilisateur ne touche pas au clavier --> la boucle se poursuit.
    - L'utilisateur tape 'e' --> je propose à l'utilisateur par un raw_input d'entrer la nouvelle valeur d'une variable puis la boucle se poursuit.
    - L'utilisateur tape nimporte quoi (sauf 'e' hein!) sur le clavier --> la boucle se poursuit.

    un classique raw_input interompt le traitement des données.
    et
    pythoncom.PumpMessages() interompt l'execution de l'appli meme si je ne touche pas au clavier.


    Cela devrait donner quelque chose de similaire en python (a$=inkey$ etant l'instruction en Basic)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    x=0
    pas=1
    while 1:
        a$=inkey$ # on attend pas,on intercept: soit a$ est vide, soit il contient la touche pressé
        if a$ == 'e':
             pas = raw_input("entrez la nouvelle valeur du pas")
        x= x + pas
        print x

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Gestion évenements clavier
    Par Tips dans le forum Windows Forms
    Réponses: 9
    Dernier message: 19/04/2006, 20h29
  2. [MFC][VC++.NET]gestion évènement clavier
    Par Rafoo dans le forum MFC
    Réponses: 2
    Dernier message: 14/12/2005, 09h29
  3. Gestion du clavier
    Par Ekinoks dans le forum OpenGL
    Réponses: 12
    Dernier message: 22/08/2005, 14h36
  4. gestion du Clavier
    Par benthebest dans le forum MFC
    Réponses: 13
    Dernier message: 07/05/2005, 22h39
  5. [MX]Optimisation de la gestion du clavier
    Par yacinechaouche dans le forum Flash
    Réponses: 8
    Dernier message: 18/04/2004, 02h13

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