Keyboard – работа с клавиатурой

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

Автоматизация ввода и обработка событий клавиатуры — важные аспекты как для тестирования приложений, так и для создания пользовательских скриптов и утилит. Когда нужно программно нажимать клавиши, реагировать на ввод или создавать свои горячие клавиши, Python предоставляет отличную библиотеку — keyboard.

keyboard — это мощный кроссплатформенный инструмент, позволяющий управлять клавиатурой на уровне операционной системы. Она работает как слушатель и генератор событий: можно как перехватывать, так и эмулировать ввод с клавиатуры.

В этой статье мы разберем библиотеку keyboard от установки до продвинутых сценариев, включая создание макросов, глобальные горячие клавиши, логгеры и обработку комбо-команд.

Основная часть

Установка и требования

pip install keyboard

На Linux требует root-доступ. На macOS частично ограничена и требует дополнительных разрешений.


Основные функции библиотеки

Библиотека работает в двух направлениях:

  1. Эмуляция нажатий клавиш

  2. Реакция на реальные нажатия пользователя


Эмуляция клавиш

keyboard.write(text)

Ввод текста как с клавиатуры.

import keyboard
keyboard.write("Hello, world!")

keyboard.press(key) / keyboard.release(key)

Нажатие и отпускание клавиш вручную.

keyboard.press("ctrl")
keyboard.press("c")
keyboard.release("c")
keyboard.release("ctrl")

keyboard.send(keys)

Нажатие комбо-команды.

keyboard.send("ctrl+shift+n")

Работа с горячими клавишами

keyboard.add_hotkey(hotkey, callback)

Регистрирует глобальную горячую клавишу.

def launch():
    print("Hotkey triggered!")

keyboard.add_hotkey("ctrl+alt+h", launch)
keyboard.wait("esc")

keyboard.remove_hotkey(hotkey)

Удаляет зарегистрированную комбинацию.

Множественные комбинации

keyboard.add_hotkey("ctrl+alt+a, ctrl+alt+b", lambda: print("Combo!"))

Реакция на события

keyboard.on_press(callback)

Вызывается при любом нажатии.

keyboard.on_release(callback)

Вызывается при отпускании клавиши.

Пример

def on_key(event):
    print(f"{event.name} pressed")

keyboard.on_press(on_key)
keyboard.wait("esc")

Работа с событиями

keyboard.is_pressed(key)

Проверка, нажата ли клавиша.

if keyboard.is_pressed("space"):
    print("Space is down")

keyboard.read_event()

Блокирующее чтение одного события.

keyboard.read_key()

Ожидает нажатия клавиши и возвращает её имя.

Пример

key = keyboard.read_key()
print(f"You pressed: {key}")

Запись и воспроизведение макросов

keyboard.record(until='esc')

Записывает все действия до нажатия определённой клавиши.

keyboard.play(events)

Воспроизводит список записанных событий.

events = keyboard.record(until="enter")
keyboard.play(events)

Работа с логами и временными метками

Каждое событие в record() содержит:

  • имя клавиши

  • время события

  • тип (нажатие/отпускание)

Можно анализировать пользовательскую активность или строить метрики.


Безопасность и fail-safe

keyboard.wait(key)

Блокирует выполнение до нажатия клавиши.

keyboard.clear_all_hotkeys()

Очищает все зарегистрированные горячие клавиши.

Прерывание

try:
    keyboard.wait("esc")
except KeyboardInterrupt:
    print("Stopped.")

Практические кейсы

Макросы и боты

Автоматизация рутины, автокликеры, игровые макросы.

Горячие клавиши для управления окнами

Создание своих сочетаний для скриптов, интерфейсов.

Утилиты для пользователей

Быстрое переключение громкости, открытие программ и веб-сайтов.

GUI-тестирование

Проверка ввода, поведения клавиш, имитация сценариев пользователя.


Интеграции с другими библиотеками

  • PyAutoGUI — совместное управление мышью и клавиатурой

  • PyQt5/PySide — сочетания в UI-приложениях

  • Pandas/Loguru — логирование и анализ пользовательских событий


Ограничения и отладка

  • На Linux требуется root для захвата клавиатуры

  • macOS требует accessibility-доступ

  • В виртуальных средах (RDP) работает нестабильно

  • Не работает в браузерах и песочницах (например, Colab)


Сравнение с аналогами

Библиотека Язык Захват клавиш Поддержка хоткеев Запись макросов
keyboard Python Да Да Да
pynput Python Да Частично Нет
AutoHotKey Собственный Да Да Да

Основные функции библиотеки keyboard

1. Эмуляция нажатий клавиш

  • keyboard.write(text)
    Имитирует ввод текста с клавиатуры.

    python
     
    Copy
     
    Download
    keyboard.write("Hello, World!")  # Печатает "Hello, World!"
  • keyboard.press(key)
    Нажимает указанную клавишу (но не отпускает).

    python
     
    Copy
     
    Download
    keyboard.press("ctrl")  # Нажимает Ctrl
  • keyboard.release(key)
    Отпускает указанную клавишу.

    python
     
    Copy
     
    Download
    keyboard.release("ctrl")  # Отпускает Ctrl
  • keyboard.press_and_release(key)
    Нажимает и сразу отпускает клавишу (аналог keyboard.send).

    python
     
    Copy
     
    Download
    keyboard.press_and_release("enter")  # Нажимает и отпускает Enter
  • keyboard.send(key, do_press=True, do_release=True)
    Аналогична press_and_release, но позволяет управлять этапами нажатия.

    python
     
    Copy
     
    Download
    keyboard.send("alt+F4")  # Нажимает Alt+F4

2. Горячие клавиши и комбинации

  • keyboard.add_hotkey(hotkey, callback, args=(), suppress=False, timeout=1, trigger_on_release=False)
    Регистрирует функцию, которая вызывается при нажатии комбинации клавиш.

    python
     
    Copy
     
    Download
    def say_hello():
        print("Hello!")
    keyboard.add_hotkey("ctrl+shift+a", say_hello)  # При нажатии Ctrl+Shift+A вызовется say_hello()
  • keyboard.remove_hotkey(hotkey)
    Удаляет ранее зарегистрированную горячую клавишу.

    python
     
    Copy
     
    Download
    hotkey = keyboard.add_hotkey("ctrl+space", lambda: print("Hotkey!"))
    keyboard.remove_hotkey(hotkey)  # Удаляет обработчик
  • keyboard.clear_hotkeys()
    Удаляет все зарегистрированные горячие клавиши.

3. Ожидание нажатия клавиш

  • keyboard.wait(key=None)
    Останавливает выполнение программы до нажатия указанной клавиши.

    python
     
    Copy
     
    Download
    keyboard.wait("esc")  # Ждёт нажатия Esc
  • keyboard.read_key()
    Возвращает нажатую клавишу (блокирует выполнение, пока клавиша не будет нажата).

    python
     
    Copy
     
    Download
    key = keyboard.read_key()  # Ждёт нажатия любой клавиши и возвращает её
    print(f"You pressed: {key}")
  • keyboard.read_event(suppress=False)
    Возвращает объект события клавиатуры (KeyboardEvent).

    python
     
    Copy
     
    Download
    event = keyboard.read_event()  # Получает событие (нажатие/отпускание)
    print(event.name, event.event_type)
  • keyboard.read_hotkey()
    Ждёт, пока пользователь введёт комбинацию клавиш, и возвращает её.

    python
     
    Copy
     
    Download
    hotkey = keyboard.read_hotkey()  # Ждёт ввода комбинации (например, "ctrl+alt+del")
    print(f"Hotkey pressed: {hotkey}")

4. Запись и воспроизведение событий

  • keyboard.record(until="esc")
    Записывает все нажатия клавиш до нажатия указанной клавиши.

    python
     
    Copy
     
    Download
    recorded = keyboard.record(until="esc")  # Записывает все клавиши до Esc
    print(recorded)  # Список событий KeyboardEvent
  • keyboard.play(events, speed_factor=1.0)
    Воспроизводит записанные события клавиатуры.

    python
     
    Copy
     
    Download
    events = keyboard.record(until="esc")
    keyboard.play(events)  # Воспроизводит записанные нажатия

5. Проверка состояния клавиатуры

  • keyboard.is_pressed(key)
    Проверяет, нажата ли указанная клавиша в данный момент.

    python
     
    Copy
     
    Download
    if keyboard.is_pressed("shift"):
        print("Shift is pressed!")
  • keyboard.get_hotkey_name()
    Возвращает строку с названием последней нажатой комбинации.

    python
     
    Copy
     
    Download
    keyboard.wait()  # Ждём нажатия
    print(keyboard.get_hotkey_name())  # Выводит, например, "ctrl+alt+delete"

6. Блокировка и управление вводом

  • keyboard.block_key(key)
    Блокирует указанную клавишу (игнорирует её нажатия).

    python
     
    Copy
     
    Download
    keyboard.block_key("a")  # Теперь клавиша "a" не будет работать
  • keyboard.unblock_key(key)
    Разблокирует клавишу.

    python
     
    Copy
     
    Download
    keyboard.unblock_key("a")  # Возвращает работу клавиши "a"
  • keyboard.suppress_key(key)
    Подавляет нажатие клавиши (не блокирует, но предотвращает её действие в системе).

    python
     
    Copy
     
    Download
    keyboard.suppress_key("win")  # Отключает действие клавиши Win

7. Дополнительные функции

  • keyboard.hook(callback)
    Устанавливает глобальный обработчик всех событий клавиатуры.

    python
     
    Copy
     
    Download
    def on_key_event(event):
        print(f"Key {event.name} was {event.event_type}")
    keyboard.hook(on_key_event)  # Вызывает функцию при любом нажатии
    keyboard.wait("esc")  # Ожидаем Esc для выхода
  • keyboard.on_press(callback)
    Упрощённый хук только для нажатий клавиш.

    python
     
    Copy
     
    Download
    def on_press(key):
        print(f"Pressed: {key.name}")
    keyboard.on_press(on_press)
    keyboard.wait("esc")
  • keyboard.on_release(callback)
    Упрощённый хук только для отпусканий клавиш.

    python
     
    Copy
     
    Download
    def on_release(key):
        print(f"Released: {key.name}")
    keyboard.on_release(on_release)
    keyboard.wait("esc")
  • keyboard.unhook_all()
    Удаляет все установленные хуки.


Заключение

keyboard — это одна из самых мощных библиотек для управления клавиатурой на Python. Её простота, гибкость и огромный набор функций позволяют использовать её в самых разных сферах — от автоматизации и тестирования до создания собственных утилит и интерфейсов.