首页 > 解决方案 > pynput 事件执行两次

问题描述

def pressLetter(charIn):
    val = getKeyValue(charIn)   
    PressKey(val)
    return

def KeyboardEvents():
from pynput import keyboard
    with keyboard.Events() as events:
    for event in events:
        if event.key == keyboard.Key.space:
            pressLetter('w')

按空间类型 ww。我将如何重写它以便它只按 w 一次?

标签: pythonpynput

解决方案


嗯,我想通了。似乎keyboard.Events() 在按键按下和按键释放时都注册了按钮按下事件。意思是...

if event.key == keyboard.Key.space:
            pressLetter('w')

按 w 两次,因为它在按下键时执行,然后释放键。我找到的解决方案是改用keyboard.Listener()

def pressLetter(charIn):
    val = getKeyValue(charIn)   
    PressKey(val)
    return

def on_press(key):
    if key == keyboard.Key.space:
        pressLetter('w')

def on_release(key):
    if key == keyboard.Key.esc:
        return False

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

listener = keyboard.Listener(on_press=on_press, on_release=on_release)
    listener.start()

推荐阅读