Python3에서 십자 키를 입력한 판정을 받는 방법
입문
curses 모듈을 사용하면 키 판정을 할 수 있습니다.다음은 의존하지 않는 방법들입니다.
https://docs.python.org/ja/3/library/curses.html#constants
정면
자기가 쓴 노트야.우직한 설치입니다.
하고 싶은 일은 십자키 등 특수한 문자를 입력한 것을 검출하는 것이다.
Unicode 제어 문자를 알아야 합니다.
wikipedia
막힌 곳
getch는 모든 문자의 입력을 가져옵니다.그러나 화살표 키는 문자 입력이 세 번 있습니다.예를 들어, 위쪽 화살표는
27 91 65
라고 합니다.이렇게 되면 화살표 키 등 특수 키를 판정할 수 없을 뿐만 아니라 원하지 않는 입력도 받을 수 있다.따라서 다음과 같이 설치했습니다.출처
getch 문자 입력 함수 수락
ord는 문자를 유니코드로 변환하는 함수입니다.
chr는 유니코드를 문자로 변환하는 함수입니다.
자기가 쓰는 디버깅도 겸하여 불필요한 코드가 되었다.
# inputの代わりに、1文字ずつ入力を受け取る関数を用意。
# try の中はWindows用、except 野中は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)
# Unicode制御文字のエイリアス
EOT = 3
TAB = 9
ESC = 27
# メインループ
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)
실행 결과
나는 이미 좋은 판정을 받았다는 것을 안다.
끝날 때
이번에는 코드가 지루해서 실시하지 않았지만 특수 키를 입력할 때의 유니코드를 보고 조건 지점에서 모두 열거하면 판정할 수 있다.이 글의 유사한 코드는 자체 제작 응용 프로그램에서 유용할 수 있다.만약 좋은 작법을 아는 다른 사람이 있다면 저에게 알려주세요.
참고 자료
Reference
이 문제에 관하여(Python3에서 십자 키를 입력한 판정을 받는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t4t5u0/items/605ad611cc02716e3b98텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)