Trouver les valeurs des touches fléchées en Python: Pourquoi sont-elles triples?



Answers

J'utilise Mac et j'ai utilisé le code suivant et cela a bien fonctionné: j'ai obtenu les valeurs pour mes touches fléchées 0,1,2,3 (Haut, Bas, Gauche, Droite): Toujours bon de mémoriser le code 27 pour la touche ESC aussi. Meilleures salutations!

while True:
    key = cv2.waitKey(1) & 0xFF

    # if the 'ESC' key is pressed, Quit
    if key == 27:
        quit()
    if key == 0:
        print "up"
    elif key == 1:
        print "down"
    elif key == 2:
        print "left"
    elif key == 3:
        print "right"
    # 255 is what the console returns when there is no key press...
    elif key != 255:
        print(key)
Question

J'essaie de trouver les valeurs que mon système local attribue aux touches fléchées, en particulier en Python. J'utilise le script suivant pour faire ceci:

import sys,tty,termios
class _Getch:       
    def __call__(self):
            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

def get():
    inkey = _Getch()
    while(1):
            k=inkey()
            if k!='':break
    print 'you pressed', ord(k)

def main():
    for i in range(0,25):
        get()

if __name__=='__main__':
    main()

Ensuite, j'ai exécuté le script et appuyé sur UP DOWN RIGHT LEFT, ce qui m'a donné cette sortie:

$ python getchar.py 
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68

Ceci est anormal car cela suggère que les touches fléchées sont enregistrées sous forme de triples (27-91-6x) sur mon système, car chaque pression sur une touche fléchée prend trois instances de get (). En comparaison, appuyer sur a, b, c et CTRL-C donne:

you pressed 97
you pressed 98
you pressed 99
you pressed 3

Quelqu'un peut-il m'expliquer pourquoi les valeurs de mes touches fléchées semblent être stockées en triplets? Pourquoi est-ce vrai? Est-ce la même chose sur toutes les plateformes? (J'utilise Linux Debian.) Sinon, comment dois-je procéder pour stocker les valeurs des touches fléchées?

L'objectif final est que j'essaie d'écrire un programme qui doit reconnaître correctement les touches fléchées et exécuter une fonction en fonction de la touche fléchée sur laquelle vous avez appuyé.




Links