underalmaty
@underalmaty

Функция отлова хоткея вешает приложение, как избежать?

Нужно выловить нажатие хоткея, когда приложение не в фокусе. Интернет дал единственную инструкцию, она, в принципе, работает, принт done выводится, однако программа зависает и ни на что, кроме нажатий хоткея не реагирует. Причём зависает как обычно - с закрашиванием и виндовским запросом остановить или подождать. Однако всё это время нажатие отлично срабатывает даже при зависшей программе.

COMBINATIONS = [
            {keyboard.Key.shift, keyboard.KeyCode(char='~')},
            {keyboard.Key.shift, keyboard.KeyCode(char='`')}
        ]

        current = set()

        def on_press(key):
            if any([key in COMBO for COMBO in COMBINATIONS]):
                current.add(key)
                if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
                    print('done')

        with keyboard.Listener(on_press=on_press) as listener:
            listener.join()
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Нельзя останавливать цикл событий, а listener.join() именно это и делает. Запускайте обработчик в отдельном QThread и шлите из него сигналы в основной поток.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы