Why Alt Gr combination works well but Shift only per one click

35 views Asked by At

I'm working on something similar to a custom keyboard layout. I want to have working combinations of shift + key, alt gr + key and shift + alt gr + key. However as alt gr + key works pretty good, after shift + key program takes shift as released even though it's still pushed.

That's the code I'm talking about:

import keyboard

altgr_pressed = False
shift_pressed = False

def switch_altgr(_):
    global altgr_pressed

    if altgr_pressed and keyboard.is_pressed("alt gr"): return
    altgr_pressed = not altgr_pressed
    print(f"alt gr pressed: {altgr_pressed}")
    

keyboard.on_press_key("alt gr", switch_altgr)
keyboard.on_release_key("alt gr", switch_altgr)


def switch_shift(_):
    global shift_pressed
    
    if shift_pressed and keyboard.is_pressed("shift"): return 
    shift_pressed = not shift_pressed
    print(f"shift pressed: {shift_pressed}")
    
keyboard.on_press_key("shift", switch_shift)
keyboard.on_release_key("shift", switch_shift)

def write():
    print(altgr_pressed)
    if altgr_pressed:
        if shift_pressed:
            keyboard.write("Ż")
        else:
            keyboard.write("ż")
    else:
        if shift_pressed:
            keyboard.write("Z")
        else:
            keyboard.write("z")
                       
keyboard.add_hotkey("a", lambda: write(), suppress=True)
keyboard.add_hotkey("shift + a", lambda: write(), suppress=True)
keyboard.add_hotkey("alt gr + a", lambda: write(), suppress=True)
keyboard.add_hotkey("shift + alt gr + a", lambda: write(), suppress=True)

keyboard.wait()

Can someone explain me why alt gr works good and shift doesn't and how to fix it?

0

There are 0 answers