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 :

Détecter évènement clavier


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Détecter évènement clavier
    Bonjour !

    Voilà, je cherche à simplement pouvoir détecter un événement clavier et retourner le numéro de la touche entrée.

    Mon "vrai" programme doit être capable de tourner en tâche de fond et de pouvoir envoyer le numéro des touches pressées au sein de messages OSC.
    Autant pour l'OSC ça ne me pose pas de soucis grâce à bibliothèque "liblo" (même si je comprends pas forcément tout le fonctionnement du code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import liblo, sys
     
    try:
        target = liblo.Address(5555)
    except liblo.AddressError, err:
        print str(err)
        sys.exit()
     
    liblo.send(target, "/foo", 1234)
    Autant mes connaissances en Python se limitent au strict minimum et je suis perdu quand il s'agit de détecter un événement clavier.

    Mes premières recherches m'orienter vers les biblio TKinter et Pygame mais je m'y perds, or je n'aurais juste besoin pour le moment qu'un peu d'éclairage quand à mes besoins...

    Merci beaucoup par avance, joyeux Noël (avec 5 jours de retard) et bonne année (avec 1 jour d'avance) !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai réussi la première étape, à savoir la détection d'event clavier et l'envoi de la valeur de la touche en OSC.
    Maintenant, ma problématique est de faire en sorte de faire tourner ce programme en tâche de fond pour qu'il récupère TOUT les events claviers.

    Voici mon code actuel, je me suis aidé de https://stackoverflow.com/questions/...ners-in-python :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/usr/bin/env python
    import sys, termios, contextlib, liblo
     
    try:
        target = liblo.Address(5555)
    except liblo.AddressError, err:
        print str(err)
        sys.exit()
     
    @contextlib.contextmanager
    def raw_mode(file):
        old_attrs = termios.tcgetattr(file.fileno())
        new_attrs = old_attrs[:]
        new_attrs[3] = new_attrs[3] & ~(termios.ECHO | termios.ICANON)
        try:
            termios.tcsetattr(file.fileno(), termios.TCSADRAIN, new_attrs)
            yield
        finally:
            termios.tcsetattr(file.fileno(), termios.TCSADRAIN, old_attrs)
     
    def main():
        print 'exit with ^C or ^D'
        with raw_mode(sys.stdin):
            try:
                while True:
                    ch = sys.stdin.read(1)
                    if not ch or ch == chr(4):
                        break
                    #print '%02x' % ord(ch),
     
    		liblo.send(target, "/foo", ord(ch)) # ------------ LIBLO
     
            except (KeyboardInterrupt, EOFError):
                pass
     
    if __name__ == '__main__':
        main()

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/08/2006, 18h54
  2. [API windows] Récupérer proprement les évènements clavier...
    Par heider dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/03/2006, 13h05
  3. [MFC][VC++.NET]gestion évènement clavier
    Par Rafoo dans le forum MFC
    Réponses: 2
    Dernier message: 14/12/2005, 09h29
  4. Réponses: 5
    Dernier message: 25/07/2005, 09h29
  5. Problème évènements clavier
    Par julie20 dans le forum Langage
    Réponses: 3
    Dernier message: 24/09/2003, 12h39

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