Comment déterminer qu'une clé croisée a été entrée dans Python3

introduction

Vous pouvez utiliser le module curses pour déterminer la clé. Voici une méthode qui n'en dépend pas https://docs.python.org/ja/3/library/curses.html#constants

Préface

Ceci est mon propre mémo. C'est une mise en œuvre simple. Ce que je veux faire, c'est détecter qu'un caractère spécial, tel qu'une croix, a été saisi.

Au préalable, il est souhaitable de connaître les caractères de contrôle Unicode. wikipedia

Où ça se coince

getch récupère l'entrée caractère par caractère. Cependant, les touches fléchées ont dû être saisies trois fois. Par exemple, la flèche vers le haut indique «27 91 65». Si rien n'est fait, non seulement il ne sera pas possible de déterminer des touches spéciales telles que les touches fléchées, mais il recevra également des entrées indésirables. Par conséquent, je l'ai implémenté comme suit.

La source

getch Une fonction qui accepte une entrée de caractère unique ord est une fonction qui convertit les caractères en Unicode, chr est une fonction qui convertit Unicode en caractères. Le code est redondant, ce qui sert également de débogage pour moi-même.

#Préparez une fonction qui reçoit une entrée caractère par caractère au lieu d'une entrée.
#Essayez pour Windows, sauf Nonaka pour Linux
try:
    from msvcrt import getch
except ImportError:
    import sys
    import tty
    import termios
    def getch():
          
            fd = sys.stdin.fileno()
            old = termios.tcgetattr(fd)
            try:
                tty.setraw(fd)
                return sys.stdin.read(1)
            finally:
                termios.tcsetattr(fd, termios.TCSADRAIN, old)

#Alias de caractère de contrôle Unicode
EOT = 3
TAB = 9
ESC = 27

#Boucle principale
while True:
    key = ord(getch())
    if key == EOT:
        break
    elif key == TAB:
        print('keydown TAB')
    elif key == ESC:
        key = ord(getch())
        if key == ord('['):
            key = ord(getch())
            if key == ord('A'):
                print('keydown uparrow')
                continue
            elif key == ord('B'):
                print('keydown downarrow')
                continue
            elif key == ord('C'):
                print('keydown leftarrow')
                continue
            elif key == ord('D'):
                print('keydown rightarrow')
                continue
    else:
        message = f'keydown {chr(key)}'
        print(message)

Résultat de l'exécution

image.png Vous pouvez voir que le jugement a été pris correctement.

À la fin

Je ne l'ai pas implémenté cette fois car le code devient redondant, mais si vous regardez l'Unicode lorsque vous entrez une clé spéciale et que vous énumérez tout avec un branchement conditionnel, vous pouvez porter un jugement. Le code similaire de cet article peut être utile lors de la création de votre propre application. Si quelqu'un d'autre connaît une bonne façon d'écrire, faites-le moi savoir.

référence

Recommended Posts

Comment déterminer qu'une clé croisée a été entrée dans Python3
Comment tester cette exception est déclenchée dans python unittest
[python] Comment vérifier si la clé existe dans le dictionnaire
Comment utiliser is et == en Python
Pour vérifier si la clé spécifiée se trouve dans le compartiment spécifié dans Boto 3
Comment utiliser l'astérisque (*) en Python. C'est peut-être tout? ..
Séquence de touches en Python
Séquence de touches en Python
Comment utiliser la bibliothèque C en Python
Comment obtenir les fichiers dans le dossier [Python]
Comment obtenir le nom de la variable lui-même en python
Comment obtenir le nombre de chiffres en Python
Comment connaître le répertoire actuel en Python dans Blender
Entrée clé qui n'attend pas l'entrée clé en Python
Trouvez la partie 575 de Wikipedia en Python
Comment trouver le coefficient de la courbe approximative passant par les sommets en Python
Comment utiliser le modèle appris dans Lobe en Python
Comment développer en Python
[python] Comment juger scalaire
[Python] Comment afficher les valeurs de liste dans l'ordre
[Python] Comment utiliser input ()
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment trouver le premier élément qui correspond aux critères de la liste Python
Comment déboguer une bibliothèque Python standard dans Visual Studio
Comment utiliser la méthode __call__ dans la classe Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
L'histoire de la définition de la clé privée à 600 avec chmod
Comment collecter des images en Python
Comment utiliser SQLite en Python
Dans la commande python, python pointe vers python3.8
Comment obtenir la version Python
[python] Quelle est la clé triée?
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment gérer le japonais avec Python
Comment supprimer "(base)" qui apparaît dans le terminal lorsqu'Anaconda est installé sur Mac
[VLC] Comment gérer le problème de ne pas être au premier plan pendant la lecture
Comment est le progrès? Continuons le boom ?? en Python
Jouez des sons en Python en supposant que le clavier est un clavier de piano
Comment déterminer l'existence d'un élément sélénium en Python
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
Le 15e comment écrire un problème de référence en temps réel hors ligne en Python
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Le 14ème problème de référence d'écriture en temps réel hors ligne en python
[Note du débutant] Comment spécifier le chemin de lecture de la bibliothèque en Python
Que faire lorsque le type de valeur est ambigu en Python?
Le 18ème comment écrire un problème de référence en temps réel hors ligne en Python
Comment afficher les octets de la même manière en Java et Python
[Introduction à Python] Comment utiliser la classe en Python?
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Comment gérer le problème du déplacement du répertoire actuel lorsque Python est exécuté depuis Atom
Comment utiliser BigQuery en Python
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python