내 로컬 시스템이 화살표 키에 할당 한 값, 특히 Python에서 값을 찾으려고합니다. 나는이 작업을 수행하기 위해 다음 스크립트를 사용하고 있습니다 :파이썬에서 화살표 키 값 찾기 : 왜 그들은 트리플입니까?
$ 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
이 그것을 제안하기 때문에 예외적이다 : 나는 스크립트를 실행하고, 나에게이 출력을 준 DOWN RIGHT LEFT, 최대 히트 그런
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()
화살표 키를 누를 때마다 get()의 세 인스턴스를 사용하기 때문에 화살표 키가 내 시스템에 triple (27-91-6x)의 형식으로 등록됩니다. 비교 누르면 A, B, C와 CTRL-C는 제공 : 내 화살표 키의 값이 트리플로 저장하는 것 왜
you pressed 97
you pressed 98
you pressed 99
you pressed 3
는 사람이 나에게 설명 할 수 있습니까? 왜 이래? 이것은 모든 플랫폼에서 동일합니까? (데비안 리눅스를 사용하고 있습니다.) 그렇지 않다면 화살표 키 값을 어떻게 저장해야합니까?
최종 목표는 화살표 키를 올바르게 인식하고 화살표 키를 눌렀을 때 기능을 수행해야하는 프로그램을 작성하려고한다는 것입니다.
키보드로 전송되는 이스케이프 코드에 대한 명확한 섹션이 없더라도 [ANSI 이스케이프 코드] (http://en.wikipedia.org/wiki/ANSI_escape_code)를 제안합니다. 그들의 형식은 프로그램에서 터미널로 보낸 것과 동일합니다. –
이것은 관련이있는 것처럼 보입니다 : http://stackoverflow.com/questions/4130048/recognizing-arrow-keys-with-stdin – Newb
왜'getch' 함수 대신에'__call__' 메쏘드가있는'_Getch' 클래스가 있습니까 ? – user2357112