Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appuyer sur telle touche du clavier

    28 décembre 2015 à 1:53:09

    Bonjour.

    Je débute dans la programmation et j'aimerais faire en sorte que quand on appuie sur la flèche du bas, une action se lance. Comment je peux faire ça ?

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 décembre 2015 à 11:17:11

      Par contre PyUserInput nécessite une interface graphique. Par exemple, impossible de l'utiliser sur un Rpi qui n'a pas de serveur X. Et ses dépendances sont assez lourdes sous Windows (pyWin32 et pyHook)... Alors dans certain cas, tout ceci peut s'avérer indispensable, quand on veut savoir si une touche est maintenue appuyée, quand elle est relâchée, etc..

      En revanche s'il s'agit juste de savoir quand une touche est pressée (autre que les touches de contrôle comme CTRL, ALT ou SHIFT), sous Windows il suffit d'utiliser le module msvcrt comme ceci :

      import msvcrt
      import sys
      
      def getkey():
          sequence = msvcrt.getch()
          while msvcrt.kbhit():
              sequence += msvcrt.getch()
          return sequence.decode(sys.stdin.encoding)
      
      
      print('Tester les touches du clavier (CTRL+C pour quitter).')
      try:
          while True:
              key = getkey()
              print('\tSequence de la touche pressée:', repr(key))
      except KeyboardInterrupt:
          pass
      

      Et sous Unix, c'est un petit peu plus compliqué...

      import fcntl
      import os
      import select
      import sys
      import termios
      import tty
      
      
      try:
          # Seulement à partir de la version 3.5 de Python.
          get_blocking = os.get_blocking
          set_blocking = os.set_blocking
      
      except AttributeError:
          # Pour toutes les autres versions.
          def get_blocking(fd):
              flags = fcntl.fcntl(fd, fcntl.F_GETFL)
              return not flags & os.O_NONBLOCK == os.O_NONBLOCK
      
          def set_blocking(fd, blocking):
              if blocking:
                  flags = fcntl.fcntl(fd, fcntl.F_GETFL) & ~os.O_NONBLOCK
              else:
                  flags = fcntl.fcntl(fd, fcntl.F_GETFL) | os.O_NONBLOCK
              fcntl.fcntl(fd, fcntl.F_SETFL, flags)
      
      
      def getkey():
          fd = sys.stdin.fileno()
          attrs = termios.tcgetattr(fd)
          sequence = ''
          try:
              tty.setcbreak(fd)
              set_blocking(fd, False)
              read, _, _ = select.select([sys.stdin], [], [])
              if read:
                  char = sys.stdin.read(1)
                  while char:
                      sequence += char
                      char = sys.stdin.read(1)
          except EOFError:
              pass
          finally:
              termios.tcsetattr(fd, termios.TCSADRAIN, attrs)
              set_blocking(fd, True)
          return sequence
      

      -
      Edité par Anonyme 28 décembre 2015 à 11:30:40

      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2015 à 21:38:14

        Salut tu est sur pygame ou pas  ?  Si tu est sur tkinter c'est très simple mais pour pygame je ne sais pas.

        -
        Edité par DonneeRex84 31 décembre 2015 à 21:40:03

        • Partager sur Facebook
        • Partager sur Twitter

        Appuyer sur telle touche du clavier

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown