실시간
Python 메뉴 만들기: 더 이상 ‘Enter’ 키 필요 없음!
Python에서 대화형 메뉴를 만드는 것은 종종 간단하고 명확합니다. 하지만 사용자가 Enter
키를 누르지 않고 바로 키 입력으로 선택할 수 있도록 사용자 경험을 향상시키고자 한다면, 조금 어려움을 겪을 수 있습니다. 이 블로그 포스트에서는 메뉴 선택을 확인하기 위해 Enter
키가 필요한 문제를 살펴보고, 키보드 입력 감지를 활용한 해결책을 소개하겠습니다.
문제 이해하기
전통적인 콘솔 애플리케이션에서는, raw_input()
(Python 3에서는 단순히 input()
라 부름)과 같은 사용자 입력 방법이 일반적으로 사용자가 옵션을 선택한 후 Enter
키를 누르도록 요구합니다. 이로 인해 특히 빠른 반응이 필요한 메뉴의 경우 사용자 경험이 저하될 수 있습니다.
사용자가 제공한 기존 코드는 다음과 같습니다:
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"
현재 상태에서는 이 코드는 사용자가 선택 후 Enter
키를 눌러야 합니다. 하지만 더 나은 방법이 있습니다!
해결책: msvcrt
사용하기
Windows 플랫폼을 사용 중이라면, msvcrt
라이브러리를 통해 실시간 입력 감지를 달성할 수 있습니다. 여기서 중요한 함수는 getch()
로, Enter
키가 눌리기를 기다리지 않고 즉시 키 입력을 캡처합니다.
단계별 가이드
-
라이브러리 가져오기 콘솔의 키보드 입력과 상호작용할 수 있게 해주는
msvcrt
라이브러리를 가져옵니다.import msvcrt
-
키 입력 캡처하기
getch()
함수를 사용하여 단일 키프레스를 기다리고, 키가 눌린 순간에 프로그램이 그에 따라 작동하도록 합니다.answer = msvcrt.getch()
-
메뉴 구현하기 이제 ‘1’ 또는 ‘2’ 키 입력을 기다리는 간단한 메뉴를 만들어 보겠습니다.
Enter
를 요구하지 않습니다.import msvcrt print("Menu") print("1) Say Foo") print("2) Say Bar") while True: # 무한 루프를 통해 키 입력을 계속 확인합니다 answer = msvcrt.getch() # 키 입력 대기 if answer == b'1': # '1'이 눌렸을 경우 print("foo") break # 응답 후 루프 종료 elif answer == b'2': # '2'가 눌렸을 경우 print("bar") break # 응답 후 루프 종료
작동 원리
- 메뉴가 표시되고 프로그램은 루프에 들어갑니다.
getch()
함수는 사용자가 키를 누를 때까지 프로그램을 정지시킵니다.- 키 입력이 감지되면,
1
또는2
와 일치하는지 확인하고 해당 작업을 실행한 후 루프를 종료합니다.
결론
위에서 설명한 단계를 따르면 Python 애플리케이션에서 보다 효율적이고 사용자 친화적인 메뉴 경험을 만들 수 있습니다. msvcrt
라이브러리를 사용하여 즉각적인 키 입력 감지를 가능하게 함으로써 사용자는 번거롭게 Enter
를 누를 필요 없이 프로그램과 상호작용할 수 있습니다.
이제 콘솔 애플리케이션을 개선하고 사용자에게 매끄러운 상호작용을 제공할 수 있습니다. 즐거운 코딩 하세요!