python (v 2.7) 中是否有任何 Key 侦听器 [已关闭]

Are there any Key listeners in python (v 2.7) [closed]

提问人:yasara malshan 提问时间:8/18/2019 更新时间:8/19/2019 访问量:70

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

4年前关闭。

我需要在下面伪代码中做一些事情。(键侦听器)。

while (true)
{
    if('a' key pressed)
    {
        A(); // calling function A
    }
    else if('b' key pressed)
    {
        B();
    }
    else if('e' key pressed)
    {
        break;
    }
}

我使用'win.getkey()'尝试了这种程序,但似乎无法正常工作。如何在python中编写合适的键侦听器?(不含第三方库)

蟒蛇 python-2.7

评论

1赞 Ron Serruya 8/18/2019
win.getkey()有什么问题?
0赞 yasara malshan 8/19/2019
used { key = win.getkey() , win.clear() , win.addstr(“检测到的键:”) , win.addstr(str(key)) } , '检测到的键:'不显示,并且卡住。

答:

1赞 milanbalazs 8/19/2019 #1

您可以尝试以下代码。它不包含第三方模块。

法典:

import sys, tty, os, termios


def getkey():
    old_settings = termios.tcgetattr(sys.stdin)
    tty.setcbreak(sys.stdin.fileno())
    try:
        while True:
            b = os.read(sys.stdin.fileno(), 3).decode()
            if len(b) == 3:
                k = ord(b[2])
            else:
                k = ord(b)
            key_mapping = {
                127: 'backspace',
                10: 'return',
                32: 'space',
                9: 'tab',
                27: 'esc',
                65: 'up',
                66: 'down',
                67: 'right',
                68: 'left'
            }
            return key_mapping.get(k, chr(k))
    finally:
        termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)


try:
    while True:
        k = getkey()
        print("Detected key: {}".format(k))
        if k == 'esc':
            quit()
        else:
            print(k)
except (KeyboardInterrupt, SystemExit):
    os.system('stty sane')
    print('stopping.')

测试和输出:

>>> python3 test.py 
Detected key: a
a
Detected key: s
s
Detected key: d
d
Detected key: f
f
Detected key: right
right
Detected key: left
left
Detected key: space
space
Detected key: tab
tab
stopping.

注意:如果您能够使用外部 Python 模块,我建议使用 或 Python 模块。友情链接: https://github.com/boppreh/keyboardhttps://github.com/moses-palmer/pynputpynputkeyboard