실시간 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 키가 눌리기를 기다리지 않고 즉시 키 입력을 캡처합니다.

단계별 가이드

  1. 라이브러리 가져오기 콘솔의 키보드 입력과 상호작용할 수 있게 해주는 msvcrt 라이브러리를 가져옵니다.

    import msvcrt
    
  2. 키 입력 캡처하기 getch() 함수를 사용하여 단일 키프레스를 기다리고, 키가 눌린 순간에 프로그램이 그에 따라 작동하도록 합니다.

    answer = msvcrt.getch()
    
  3. 메뉴 구현하기 이제 ‘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를 누를 필요 없이 프로그램과 상호작용할 수 있습니다.

이제 콘솔 애플리케이션을 개선하고 사용자에게 매끄러운 상호작용을 제공할 수 있습니다. 즐거운 코딩 하세요!