не могу понять, как сделать правильно функцию для отлавливания сочетаний клавиш

Рейтинг: 2Ответов: 2Опубликовано: 02.08.2023

Есть такой код:

def hotkey(widget):
    key = keyboard.read_key()
    modificator = ["shift", "ctrl", "alt"]
    if keyboard.is_pressed(modificator[0]):
        modkey = keyboard.read_key()
        key = modificator[0] + " + " + modkey
    elif keyboard.is_pressed(modificator[1]):
        modkey = keyboard.read_key()
        key = modificator[1] + " + " + modkey
    elif keyboard.is_pressed(modificator[2]):
        modkey = keyboard.read_key()
        key = modificator[2] + " + " + modkey
    widget.value = key.title()
    widget.update()
    print(key)

Ну и, собственно, он не работает корректно. С текущим вариантом необходимо очень быстро нажать на другую клавишу после зажатия модификатора, иначе он просто выдаст, к примеру, "shift + shift", а мне нужно, что бы программа ждала сколько угодно времени, пока не нажмут вторую клавишу. И вторая проблема: при единоразовом кратковременном нажатии на тот же шифт выдает "shift + shift".

Ответы

▲ 0

частично решил свою проблему так:

import keyboard

def hotkey():
    shift = "shift"
    ctrl = "ctrl"
    alt = "alt"
    key = keyboard.read_hotkey(suppress = False)
    key = key.split('+')

    if shift in key[0]:
        if shift == "".join(key):
            key = shift
        else:
            key = f"{shift} + {key[1]}"

    elif ctrl in key[0]:
        if ctrl == "".join(key):
            key = ctrl
        else:
            key = f"{ctrl} + {key[1]}"

    elif alt in key[0]:
        if alt == "".join(key):
            key = alt
        else:
            key = f"{alt} + {key[1]}"

    elif shift not in key and ctrl not in key and alt not in key:
        key = key[0]

    print(key)

hotkey()

скорее всего в будущем функцию придется дополнять или даже, скорее всего, переписывать, но пока так сойдет

я в программировании новичок, поэтому мог написать много лишнего, но делаю как могу

▲ 0

Если вам нужно запустить функцию при нажатии определённых горячих клавиш, то это можно реализовать вот так:

import keyboard

def test():
    print('сtrl+shift+a нажаты')

keyboard.add_hotkey('ctrl+shift+a', test)

keyboard.wait()