-->

读取按键Python的方法?(Python method for reading keypress?

2019-06-17 22:41发布

我是新来的Python,我只是做了一个游戏和Python中的菜单。 问题是,在使用(raw_)输入()要求我按ENTER键按键每次经过,我想让这个按向下箭头会立即选择下一个菜单项,或者在游戏中下移。 目前,它要求我喜欢的类型“下”,然后按下回车键。 我也做了很多的研究,但我宁愿不下载庞大的模块(例如pygame的)只是实现了单的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':
        ...

等等...任何帮助吗?

Answer 1:

想通了由我自己测试的所有东西。 找不到任何关于它的话题寿,所以我就离开了这里的解决方案。 这可能不是唯一的,甚至是最好的解决方案,但它适合我的目的(残培的范围之内),有总比没有好。

注意:适当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()

另外,如果别人需要,你可以很容易地找出键码从谷歌,或者通过使用python,只是按键:

from msvcrt import getch
while True:
    print(ord(getch()))


Answer 2:

请参阅MSDN 残培文档。 特别:

该_getch and_getwch功能读取从控制台的单个字符不回显的字符。 这些函数都不可以被用来读取CTRL + C。 当读取一个功能键或箭头键,每个功能必须被调用两次; 第一呼叫返回0或取值为0xE0,且第二呼叫返回实际的键代码。

Python的函数返回一个字符。 可以使用ord()来获得的整数值可以测试,例如keycode = ord(msvcrt.getch())

所以,如果你读了为0x00或取0xE0,读它第二次拿到钥匙密码箭头或功能键。 从实验,0×00之前F1-F10(0x3B-0×44),并取0xE0之前箭头键和插入/缺失/家庭/结束/上一页/下一页。



Answer 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()


文章来源: Python method for reading keypress?