Méthode Python pour la lecture de keypress?


Answers

Voir les documentations MSDN getch . Plus précisément:

Les fonctions _getch et_getwch lisent un seul caractère de la console sans répercuter le caractère. Aucune de ces fonctions ne peut être utilisée pour lire CTRL + C. Lors de la lecture d'une touche de fonction ou d'une touche fléchée, chaque fonction doit être appelée deux fois; le premier appel renvoie 0 ou 0xE0 et le deuxième appel renvoie le code de clé actuel.

La fonction Python renvoie un caractère. vous pouvez utiliser ord() pour obtenir une valeur entière que vous pouvez tester, par exemple keycode = ord(msvcrt.getch()) .

Donc, si vous lisez un 0x00 ou 0xE0, lisez-le une seconde fois pour obtenir le code clé d'une flèche ou d'une touche de fonction. D'expérimentation, 0x00 précède F1-F10 (0x3B-0x44) et 0xE0 précède les touches fléchées et Ins / Del / Home / Fin / PageUp / PageDown.

Question

Je suis nouveau sur Python, et je viens de créer un jeu et un menu en Python. La question est, qu'utiliser (raw_) input () m'oblige à appuyer sur enter après chaque pression de touche, je voudrais faire en sorte qu'appuyer sur arrow-down sélectionnera instantanément l'élément de menu suivant, ou descendra dans le jeu. Pour l'instant, il me faut aimer le type "down" puis appuyer sur enter. J'ai aussi fait pas mal de recherches, mais je préfèrerais ne pas télécharger d'énormes modules (par exemple pygame) juste pour obtenir une seule méthode keyDown (). Alors, y a-t-il des moyens plus faciles que je n'ai pas pu trouver?

Edit: J'ai juste découvert que msvcrt.getch() ferait l'affaire. Ce n'est pas keyDown (), mais cela fonctionne. Cependant, je ne suis pas sûr de savoir comment l'utiliser non plus, cela semble assez bizarre, de l'aide ici? C'est ce que j'ai eu en ce moment:

from msvcrt import getch
while True:
    key = getch()
    print(key)

Cependant, il continue à me donner tous ces octets absurdes, par exemple, la flèche vers le bas est la suivante:

b'\xe0'
b'P'

Et je n'ai aucune idée de comment les utiliser, j'ai essayé de comparer avec chr () et même utiliser ord () mais je ne peux pas faire de comparaison. Ce que j'essaie de faire est essentiellement ceci:

from msvcrt import getch
while True:
    key = getch()
    if key == escape:
        break
    elif key == downarrow:
        movedown()
    elif key == 'a':
        ...

Et ainsi de suite ... Toute aide?