사용자가 선택을 위해 [enter] 키를 누르지 않아도 되는 메뉴를 만들려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/1829

  •  08-06-2019
  •  | 
  •  

문제

Python으로 메뉴가 있습니다.그 부분은 쉬웠어요.나는 사용하고있다 raw_input() 사용자로부터 선택을 얻으려면.

문제는 raw_input (및 입력) 사용자가 누르도록 요구 입력하다 선택을 한 후.키를 눌렀을 때 프로그램이 즉시 작동하도록 하는 방법이 있습니까?지금까지 내가 얻은 것은 다음과 같습니다.

import sys
print """Menu
1) Say Foo
2) Say Bar"""
answer = raw_input("Make a selection> ")

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

다음과 같은 것이 있으면 좋을 것 같습니다.

print menu
while lastKey = "":
    lastKey = check_for_recent_keystrokes()
if "1" in lastKey: #do stuff...
도움이 되었습니까?

해결책

Windows의 경우:

import msvcrt
answer=msvcrt.getch()

다른 팁

리눅스의 경우:

  • 원시 모드 설정
  • 키 입력을 선택하고 읽으십시오
  • 일반 설정 복원
import sys
import select
import termios
import tty

def getkey():
    old_settings = termios.tcgetattr(sys.stdin)
    tty.setraw(sys.stdin.fileno())
    select.select([sys.stdin], [], [], 0)
    answer = sys.stdin.read(1)
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
    return answer

print """Menu
1) Say Foo
2) Say Bar"""

answer=getkey()

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

와, 정말 오래 걸렸네요.좋아, 내가 한 일은 여기까지야

#!C:\python25\python.exe
import msvcrt
print """Menu
1) Say Foo 
2) Say Bar"""
while 1:
    char = msvcrt.getch()
    if char == chr(27): #escape
        break
    if char == "1":
        print "foo"
        break
    if char == "2":
        print "Bar"
        break

Python과 함께 제공되는 IDLE, Python...을 사용하면 실패합니다.하지만 실제 프로그램인 DOS(er, CMD.exe)에서 실행해 보니 잘 돌아갔습니다.

작업 관리자가 없으면 누구도 IDLE에서 시도하지 않습니다.

나는 매우 즉각적으로 반응하지 않는 메뉴와 함께 어떻게 살았는지를 이미 잊어버렸습니다.

IDLE에서 msvcrt가 실패하는 이유는 IDLE이 msvcrt를 실행하는 라이브러리에 액세스하지 않기 때문입니다.반면 cmd.exe에서 기본적으로 프로그램을 실행하면 잘 작동합니다.Mac 및 Linux 터미널에서 프로그램이 폭발하는 것과 같은 이유입니다.

하지만 특별히 Windows용으로 이것을 사용한다면 더 많은 힘을 얻을 수 있을 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top