如何在不使用pygame

时间:2017-07-04 10:16:29

标签: python keyboard-events

我目前正在寻找能够检测/监控键盘的库。 我的目的是检测何时按下按键并在发生按键时发生某些事情。

大多数SO帖子建议使用pygame,但我发现它有点太多了,因为这个简单的任务涉及到这样的库。我还试过pynput,结果只检测到一次按下而不是按下一按。

关于我如何能够做到这一点的任何建议,同时循环检测按键被按下/按住...

我尝试使用while循环:

from pynput import keyboard

def on_press(key):
    while key == keyboard.Key.cmd_l:
        try:
            print('- Started recording -'.format(key))
        except IOError:
            print "Error"
    else:
        print('incorrect character {0}, press cmd_l'.format(key))


def on_release(key):
    print('{0} released'.format(key))
    if key == keyboard.Key.cmd_l:
        print('{0} stop'.format(key))
        keyboard.Listener.stop
        return False



with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

while解决方案使其陷入while循环,使其无法摆脱它。

2 个答案:

答案 0 :(得分:1)

我找到的最简单的方法之一是使用pynput module.can在这里可以找到很好的例子

from pynput import keyboard

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

def on_release(key):
    print('{0} released'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False

收集事件直到发布

with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

以上是为我设计并安装的示例,请转到

sudo pip install pynput (pip3 if python3.*)

答案 1 :(得分:0)

实际上非常简单。只需几行代码,它就完成了!

from turtle import *

def a():
    print("key is pressed!")
    forward(5)

def b():
    print("key is not pressed!")
    backward(30)

listen()
onkeypress(a," ")
onkeyrelease(b," ")

您可以用任意选择的键替换“”,并用“”括起来 例如:“ a”,“ h”,“ e”,“ Up”,“ y”