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 :

Lire directement les frappes clavier


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 24
    Points
    24
    Par défaut Lire directement les frappes clavier
    Bonjour à tous,
    j'aimerais pouvoir lire directement les frappes claviers de l'utilisateurs ( pas comme la fonction input() ou raw_input() par exemple ), afin de rendre le mode console de mon programme plus "dynamique", seulement je ne sais pas comment faire.

    Je sais le faire depuis le module "curses" en utilisant la fonction raw() puis la fonction ord() pour tester les frappes seulement je n'aime pas curses car ça me demanderais déjà de réécrire en grande partie mon programme et aussi car curses est très contraignant sur la taille du terminal ( et il crash si le terminal devient trop petit, trop grand ou si le texte dépasse la taille initiale du terminal ... ).

    Voilà pourquoi j'aimerais pouvoir le faire d'une autre manière ( plus simple ? ), je sais qu'il existe pyhook pour windows mais mon programme ne tourne que sur linux donc ce n'est pas une solution ...

    Merci d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    il est temps de se mettre aux GUIs ...

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Sur la banquise vous pouvez utiliser tty et termios pour cela.
    Faites une recherche de 'getch' sur le forum et vous aurez des exemples.
    En voici un:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    #
    #
    import threading
    import sys
     
    class SetAffichage(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
            self._stopevent = threading.Event()
            self._getch=_Getch()
     
        def run(self):
            while not self._stopevent.isSet():
                _lettre = self._getch()
                if _lettre == 'a':
                    self.stop()
                print _lettre
     
        def stop(self):
            self._stopevent.set()
     
    class _Getch:
        def __init__(self):
            if sys.platform == 'linux2':
                self.getch = _GetchUnix()
            elif sys.platform == 'win32':
                self.getch = _GetchWindows()
            elif sys.platform == 'darwin':
                self.getch = _GetchMac()
            else:
                pass # TODO
     
        def __call__(self):
            return self.getch()
     
    class _GetchUnix:
        def __init__(self):
            import tty
     
        def __call__(self):
            import tty, termios
            _fd = sys.stdin.fileno()
            _old_settings = termios.tcgetattr(_fd)
            try:
                tty.setraw(sys.stdin.fileno())
                ch = sys.stdin.read(1)
            finally:
                termios.tcsetattr(_fd, termios.TCSADRAIN, _old_settings)
            return ch
     
    class _GetchWindows:
        def __init__(self):
            import msvcrt
     
        def __call__(self):
            import msvcrt
            return msvcrt.getch()
     
    class _GetchMac:
        def __init__(self):
            import Carbon
     
        def __call__(self):
            import Carbon
            # A finir
            if Carbon.Evt.EventAvail(0x0008)[0]==0:
                return ''
            else:
                (what, msg, when, where, mod)=Carbon.Evt.GetNextEvent(0x0008)
                return chr(msg & 0x000000FF)
     
    trhvar = SetAffichage()
    trhvar.start()
    @+

    Edit: Et une petite note pour les utilisateurs de Windows.
    Merci d'utiliser le forum pour les questions techniques.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/01/2014, 11h22
  2. Rediriger les frappes clavier
    Par ludo.guy dans le forum Windows
    Réponses: 1
    Dernier message: 27/03/2009, 20h55
  3. enregistrer les frappes au clavier
    Par warubi dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/05/2007, 08h26
  4. Réponses: 2
    Dernier message: 19/06/2005, 10h37
  5. [Turbo Pascal] Lire une touche au clavier sans interrompre le programme
    Par Allelouia dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 29/03/2003, 22h31

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