Python 如何在不使用pygame的情况下检测按键事件和按键按住事件
我目前正在寻找一个能够检测/监控键盘的库。 我的意图是检测何时按下了一把钥匙,当它发生时,应该会发生什么事情 大多数SO帖子都建议使用pygame,但我觉得它有点太多了,无法为这个简单的任务使用这样的库。我还尝试了Python 如何在不使用pygame的情况下检测按键事件和按键按住事件,python,keyboard-events,Python,Keyboard Events,我目前正在寻找一个能够检测/监控键盘的库。 我的意图是检测何时按下了一把钥匙,当它发生时,应该会发生什么事情 大多数SO帖子都建议使用pygame,但我觉得它有点太多了,无法为这个简单的任务使用这样的库。我还尝试了pynput,结果只检测到一次按压,而不是一连串按压 当按下/按住某个键时,有没有关于如何执行此操作的建议 我对while循环的尝试: from pynput import keyboard def on_press(key): while key == keyboard.K
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循环中,无法摆脱它 我发现的最简单的方法之一是使用pynput模块。在这里也可以找到很好的例子
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
收集事件直到发布
以上是为我设计的示例,要安装,请继续
其实很简单。只要几行代码,就完成了
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”我完全尝试了您发布的代码,它只检测到当按下并按住键时,回调函数只被调用一次。为什么不将此代码段绑定到
中呢,但这会导致被困在while循环中,而无法退出。添加了带有while循环@Nerdy的代码。若你们尝试一下,你们会发现它被困在while循环中。并不是那个么简单。在我的系统上,像许多人一样,由于操作系统的按键重复功能,按下按键会出现一系列的按下和释放。也就是说,除非在系统级禁用“按键重复”,否则无法检测到以这种方式按下按键。@cdlane同样,它也会变成大量按下。但这已经够近了,而且还挺管用的!
sudo pip install pynput (pip3 if python3.*)
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," ")