2
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')

Pressing space types ww. How would I rewrite this so that it only presses w once?

2 Answers2

1

Well, I figured it out. It appears that keyboard.Events() registers button press events on both key pressed and key released. Meaning that...

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

Presses w twice because it executes both on key pressed, and then key released. The solution I found was to use keyboard.Listener() instead

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

This worked for me:

def KeyboardEvents():
    from pynput import keyboard
        with keyboard.Events() as events:
            for event in events:
                if isinstance(event, keyboard.Events.Press):
                    if event.key == keyboard.Key.space:
                        pressLetter('w')
K. Jensen
  • 31
  • 4