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 :

[debutant]Récupérer la saisie d'une touche


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut [debutant]Récupérer la saisie d'une touche
    Bonsoir.
    Voici mon problème : si on utilise des modules graphiques par exemple Tk, sdl et je suppose aussi pour les autres, il est possible de faire une boule qui permet d'écouter les évènements : on peut ainsi récupérer les touches pressées sous forme d'event.

    Cependant, je voudrais pouvoir faire de même en console. Bien évidemment, input() n'est pas adaptée, car elle met le programme en pause, alors que ce que je veux, c'est que le programme tourne, et fasse certaines actions SI on appuie sur certaines touches.

    Tout ce que je trouve en ligne, c'est des trucs vagues sous windows, or, je suis sous linux, et j'aimerais autant que possible une solution portable.

    Connaissez vous une solution?

    Merci d'avance

  2. #2
    Membre Expert 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
    Par défaut
    Bonjour,

    J'ai ceci qui traine dans mes exemples.
    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
     
    class _Getch:
        def __init__(self):
            if sys.platform == 'linux2':
                self.getch = self._GetchUnix
            elif sys.platform == 'win32':
                self.getch = self._GetchWindows
            elif sys.platform == 'darwin':
                self.getch = self._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)
    @+

  3. #3
    Membre Expert 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
    Par défaut
    Re,

    Voici ce que cela donne

    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()
    @+

  4. #4
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Merci beaucoup! Je vais décortiquer vos exemples, ça ne me fera pas de mal. Entre temps, je suis tombé sur la bibliotheque curses d'ailleurs! Tant de choses à apprendre!

Discussions similaires

  1. simuler la saisi d'une touche
    Par warubi dans le forum Dev-C++
    Réponses: 11
    Dernier message: 20/02/2007, 15h06
  2. Réponses: 4
    Dernier message: 20/04/2006, 20h50
  3. [Debutant] Récupérer le nom d'une image
    Par Djoul dans le forum Débuter
    Réponses: 4
    Dernier message: 30/05/2005, 09h52
  4. [Debutant] récupérer l'année d'une date
    Par petitelulu dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/10/2004, 15h28
  5. Réponses: 2
    Dernier message: 29/03/2004, 13h44

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