2017-09-23 18 views
0

인터넷을 통해 잠시 동안 찾고 있었지만 리눅스 및 Windows 용 화살표를 잡을 수있는 독특한 방법을 찾지 못하는 것 같습니다.(Python3) Linux 및 Windows 화살표 키 누르기

from msvcrt import getch 

while True: 
    print ('Distance from zero: ' + str(pos)) 
    key = ord(getch()) 
    if key == 224: #Special keys (arrows, f keys, ins, del, etc.) 
     key = ord(getch()) 
     if key == 80: #Down arrow 

Linux의 경우 나는 termios 패키지 사용 :

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(3) 
      finally: 
       termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) 
      return ch 

def get(): 
     inkey = _Getch() 
     while(1): 
       k=inkey() 
       if k!='':break 
     if k=='\x1b[A': 
       print ("up") 

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

if __name__=='__main__': 
     main() 

가 나는 또한 리눅스와 윈도우에서 지원하는 패키지를 찾았을 창에 msvcrt 패키지와

내가이 솔루션을 발견 : keyboard

import keyboard #Using module keyboard 
while True:#making a loop 
    try: #used try so that if user pressed other than the given key error will not be shown 
     if keyboard.is_pressed(keyboard.KEY_DOWN):#if arrow down is pressed 
      print('You Pressed down Key!') 

이 se ems는 Windows에서는 좋지만 Linux에서는 작동하지 않습니다.

은 (내가 스택 오버 플로우에 대한 모든 구현을 발견했다.)

내 목표는 다른 선택에 위아래로 내 화살표를 이동하는 것입니다. 이 작업을 완료하는 다른 방법도 환영합니다.

답변

0

귀하의 질문은 단말 또는 명령 프롬프트에서만 화살표 키 이벤트 잡기와 관련 있다고 가정합니다. 그렇다면, 리눅스에서 윈도우와 termios + tty에 getch()를 사용하는 것은 여러분이 언급 한 것처럼 갈 길입니다.

는 는

는 대체 크로스 플랫폼 방법은 다음과 같습니다 :

리눅스에
  1. curses 모듈은 일반적으로 권장합니다, 당신은 또한 창문이 모듈에 대한 비공식 바이너리를 찾을 수 있습니다 지원 here, 나 또한 실행하여 :

pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl

    질문에 언급 된 키보드 모듈은 리눅스에서 작동
  1. 만 sudo 권한을 가지고, here을 언급했다. 내 리눅스 컴퓨터에서 작동하는 것 같아 PyUserInput 시도해 볼 수도 있습니다. 일반적으로

당신이 MSVCRT/ttty + termios의에서 자신의 솔루션을 구현하거나 제공 파이 게임 또는 Tkinter를 (응용 프로그램은 특히 터미널에서 실행하도록 요구하지 않는 경우)와 같은 GUI 라이브러리를 사용하는 것이 더 낫다 불구하고 키보드 이벤트를 잡는 기능