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
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
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.
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)
Vous pouvez voir que le jugement a été pris correctement.
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.