Мониторинг и управление клавиатурой в Python.
Использование модуля pynput.keyboard библиотеки pynput в Python.
Модуль pynput.keyboard библиотеки pynput содержит классы для управления и мониторинга клавиатуры.
Содержание:
Управление клавиатурой.
Для управления клавиатурой используйте класс keyboard.Controller следующим образом:
Мониторинг клавиатуры.
Для мониторинга клавиатуры используйте класс keyboard.Listener следующим образом:
Слушатель клавиатуры keyboard.Listener — это threading.Thread , и все обратные вызовы будут вызываться из потока.
Чтобы остановить слушатель клавиатуры, можно вызвать keyboard.Listener.stop() из любого места, что в свою очередь вызовет исключение StopException или возвратить False из функции обратного вызова.
Аргумент key , который передается слушателем в обратные вызовы, является keyboard.Key для специальных клавиш и keyboard.KeyCode для обычных буквенно-цифровых клавиш или просто None для неизвестных клавиш.
При использовании приведенной выше неблокирующей версии текущий поток продолжит выполнение. Это может быть необходимо при интеграции с другими платформами графического интерфейса, включающими основной цикл, но при запуске из скрипта это приведет к немедленному завершению программы.
Поток слушателя клавиатуры keyboard.Listener .
Обратные вызовы слушателя keyboard.Listener , на некоторых платформах, особенно в Windows, вызываются непосредственно из рабочего потока. Это означает, что длительно выполняющиеся процедуры и блокирующие операции не должны вызываться из обратного вызова, так как это может привести к зависанию ввода для всех процессов.
Возможный обходной путь — это просто отправить входящие события в очередь и позволить отдельному потоку обрабатывать их.
Обработка ошибок слушателя клавиатуры.
Если обработчик обратного вызова вызывает исключение, то слушатель будет остановлен. Поскольку обратные вызовы выполняются в выделенном потоке, исключения не будут автоматически повторно вызываться.
Чтобы получать уведомления об ошибках обратного вызова, необходимо вызвать Thread.join() для экземпляра слушателя keyboard.Listener :
Переключение прослушивания событий для клавиатуры.
После вызова keyboard.Listener.stop() слушатель не может быть перезапущен, так как слушатели keyboard.Listener являются экземплярами threading.Thread .
Если приложение требует переключения событий keyboard.Listener , то необходимо либо добавить внутренний флаг для игнорирования событий, когда они не требуются, либо создать новый слушатель keyboard.Listener для возобновления прослушивания.
Синхронное прослушивание событий для клавиатуры.
Для упрощения написания сценариев с синхронным прослушиванием событий поддерживается служебный класс keyboard.Events . Этот класс поддерживает чтение отдельных событий неблокирующим способом, а также повторение всех событий.
Чтобы прочитать одно событие, используйте следующий код:
Чтобы перебрать события клавиатуры, используйте следующий код:
Обратите внимание, что контекстный менеджер with не поддерживает неблокирующую операцию, поэтому он будет ожидать хотя бы одно событие клавиатуры.
События будут экземплярами внутренних классов, найденных в keyboard.Events .
Прослушивание глобальных горячих клавиш.
Обычный вариант использования клавиатурных мониторов — реакция на глобальные горячие клавиши. Так как слушатель не поддерживает никакого состояния, то горячие клавиши, использующие сочетания несколько клавиш, должны где-то хранить это состояние.
Для этой цели модуль pynput предоставляет класс keyboard.HotKey . Он содержит два метода для обновления состояния, предназначенных для простого взаимодействия со слушателем клавиатуры: keyboard.HotKey.press и keyboard.HotKey.release , которые можно напрямую передавать в качестве обратных вызовов слушателя.
Предполагаемое использование выглядит следующим образом:
Представленный код создаст горячую клавишу, а затем использует слушатель для обновления ее состояния. Как только все указанные клавиши одновременно будут нажаты, будет вызвана функция on_activate() .
python 3 как отследить нажатие на кнопки
Как мне отследить нажатие на кнопку клавиатуры если python скрипт запущен в фоновом режиме?
![]()
![]()
Отследить нажатие кнопок можно через модуль keyboard :
Это пример для отслеживания клика по горячим кнопкам:
Отслеживание всех кликов на кнопки:
Вот таким способом решил эту задачу я:
Как видишь, я использовал модуль keyboard.
Подробнее ознакомиться с ним можно здесь
![]()
Вот таким способом:
![]()
Всё ещё ищете ответ? Посмотрите другие вопросы с метками python python-3.x клавиатура или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
обнаружить нажатие клавиш в Python?
Я делаю программу типа секундомера на Python, и я хотел бы знать, как определить, нажата ли клавиша (например, p для паузы и s для остановки), и я не хотел бы, чтобы это было что-то вроде raw_input, которое ждет ввод пользователя перед продолжением выполнения. Кто-нибудь знает, как это сделать в цикле while?
Кроме того, я хотел бы сделать этот кроссплатформенный, но если это невозможно, то моя основная цель разработки — Linux.
Python имеет модуль клавиатуры с множеством функций. Установите его, возможно, с помощью этой команды:
Затем используйте его в коде, например:
Для тех, кто работает с окнами и изо всех сил пытается найти рабочий ответ, вот мой: pynput
Приведенная выше функция будет печатать, какую бы клавишу вы ни нажимали, плюс запускает действие, когда вы отпускаете клавишу «esc». Документация по клавиатуре здесь для более разнообразного использования.
Маркус фон Броуди выделил потенциальную проблему, а именно: для этого ответа не требуется, чтобы вы были в текущем окне, чтобы этот скрипт был активирован, решение для Windows:
Поскольку OP упоминает raw_input — это означает, что ему нужно решение cli. Linux: curses — это то, что вам нужно (Windows PDCurses). Curses, это графический API для программного обеспечения cli, вы можете добиться большего, чем просто обнаруживать ключевые события.
Этот код будет обнаруживать клавиши до тех пор, пока не будет нажата новая строка.
С keyboard модулем можно сделать больше вещей .
Вот некоторые из методов:
Способ №1:
Используя функцию read_key() :
Это приведет к разрыву цикла при нажатии p клавиши.
Способ №2:
Использование функции wait :
Он будет ждать, пока вы нажмете, p и продолжит вводить код по мере его нажатия.
Способ №3:
Используя функцию on_press_key :
Ему нужна функция обратного вызова. Я использовал, _ потому что функция клавиатуры возвращает этой функции событие клавиатуры.
После выполнения он запустит функцию при нажатии клавиши. Вы можете остановить все перехватчики, запустив эту строку:
Метод №4:
На этот метод уже ответил user8167727, но я не согласен с кодом, который они сделали. Он будет использовать функцию, is_pressed но по-другому: