복붙노트

[PYTHON] keypress를 읽는 파이썬 방법?

PYTHON

keypress를 읽는 파이썬 방법?

저는 Python을 처음 접했고, 방금 Python에서 게임과 메뉴를 만들었습니다. 질문은, (raw_) input ()을 사용할 때마다 모든 keypress 후에 Enter 키를 눌러야 만합니다. 아래쪽 화살표를 누르면 즉시 다음 메뉴 항목을 선택하거나 게임에서 아래쪽으로 움직 이도록하고 싶습니다. 지금은 "down"을 입력하고 Enter를 누르라고합니다. 나는 또한 많은 연구를했지만, 하나의 keyDown () 메소드를 구현하기 위해 막대한 모듈 (예 : 파이 게임)을 다운로드하지 않기를 바란다. 그래서 나는 쉽게 찾을 수없는 더 쉬운 방법이 있습니까?

편집하다: msvcrt.getch ()가 트릭을 수행한다는 것을 알았습니다. 그것은 keyDown ()이 아니지만 작동합니다. 그러나, 나는 그것을 사용하는 방법도 모르겠다, 그것은 꽤 이상하게 보입니다, 여기 어떤 도움이 필요합니까? 이것은 내가 지금 가지고있는 것입니다.

from msvcrt import getch
while True:
    key = getch()
    print(key)

그러나, 그것은 나에게 이러한 넌센스 바이트를 계속 제공합니다. 예를 들어 아래쪽 화살표는 다음과 같습니다.

b'\xe0'
b'P'

그리고 나는 그것들을 사용하는 방법을 모릅니다. chr ()과 비교하려고 시도 했었고 심지어 ord ()를 사용하려고했지만 실제로 어떤 비교도 할 수 없었습니다. 내가하려는 것은 기본적으로 다음과 같습니다.

from msvcrt import getch
while True:
    key = getch()
    if key == escape:
        break
    elif key == downarrow:
        movedown()
    elif key == 'a':
        ...

그래서 ... 도움이 필요 하신가요?

해결법

  1. ==============================

    1.혼자서 모든 것을 시험 해보면 알 수 있습니다. 그 (것)들에 관하여 어떤 화제도 찾아 낼 수 없었다, 그래서 나는 해결책을 여기에서 남겨 둘 것이다. 이것은 유일한 해결책이 아닐 수도 있지만, 제 목적을 위해 (getch의 한계 내에서) 작동하며 아무 것도없는 것보다 낫습니다.

    혼자서 모든 것을 시험 해보면 알 수 있습니다. 그 (것)들에 관하여 어떤 화제도 찾아 낼 수 없었다, 그래서 나는 해결책을 여기에서 남겨 둘 것이다. 이것은 유일한 해결책이 아닐 수도 있지만, 제 목적을 위해 (getch의 한계 내에서) 작동하며 아무 것도없는 것보다 낫습니다.

    참고 : 모든 키와 실제 키 누름을 인식하는 적절한 keyDown ()은 여전히 ​​가치가 있습니다.

    해결책 : ord () - 함수를 사용하여 먼저 getch ()를 정수로 변환합니다 (가상 키 코드이지만 너무 확실하지는 않습니다). 그런 다음 결과를 원하는 키를 나타내는 실제 숫자와 비교합니다. 또한 필요하다면 문자로 변환 할 수 있도록 반환 된 숫자 주위에 여분의 chr ()을 추가 할 수 있습니다. 그러나, 나는 주로 아래쪽 화살표, esc 등을 사용하고 있기 때문에 캐릭터로 변환하는 것은 어리 석다. 다음은 최종 코드입니다.

    from msvcrt import getch
    while True:
        key = ord(getch())
        if key == 27: #ESC
            break
        elif key == 13: #Enter
            select()
        elif key == 224: #Special keys (arrows, f keys, ins, del, etc.)
            key = ord(getch())
            if key == 80: #Down arrow
                moveDown()
            elif key == 72: #Up arrow
                moveUp()
    

    또한 다른 사람이 필요하면 Google에서 키 코드를 쉽게 찾거나 Python을 사용하여 키를 누르면됩니다.

    from msvcrt import getch
    while True:
        print(ord(getch()))
    
  2. ==============================

    2.MSDN getch 문서를 참조하십시오. 구체적으로 :

    MSDN getch 문서를 참조하십시오. 구체적으로 :

    파이썬 함수는 문자를 반환합니다. ord ()를 사용하여 테스트 할 수있는 정수 값을 가져올 수 있습니다 (예 : keycode = ord (msvcrt.getch ()).

    따라서 0x00 또는 0xE0을 읽으면 다시 읽음으로써 화살표 또는 기능 키의 키 코드를 얻습니다. 실험에서 0x00은 F1-F10 (0x3B-0x44) 앞에오고 0xE0은 화살표 키와 Ins / Del / Home / End / PageUp / PageDown 앞에옵니다.

  3. ==============================

    3.

    from msvcrt import getch
    
    pos = [0, 0]
    
    def fright():
        global pos
        pos[0] += 1
    
    def fleft():
        global pos 
        pos[0] -= 1
    
    def fup():
        global pos
        pos[1] += 1
    
    def fdown():
        global pos
        pos[1] -= 1
    
    while True:
        print'Distance from zero: ', pos
        key = ord(getch())
        if key == 27: #ESC
            break
        elif key == 13: #Enter
            print('selected')
        elif key == 32: #Space
            print('jump')
        elif key == 224: #Special keys (arrows, f keys, ins, del, etc.)
            key = ord(getch())
            if key == 80: #Down arrow
                print('down')
                fdown
            elif key == 72: #Up arrow
                print('up')
                fup()
            elif key == 75: #Left arrow
                print('left')
                fleft()
            elif key == 77: #Right arrow
                print('right')
                fright()
    
  4. from https://stackoverflow.com/questions/12175964/python-method-for-reading-keypress by cc-by-sa and MIT license