Запись действий в python keyboard
У меня есть два списка:
keys = [],
delay = []
Нужна функция def record(), которая при нажатии на хоткей (например, Alt + F10), будет запускаться и считывать каждое действие пользователя:
Когда он НЕ нажимает клавишу и просто ждёт и когда он НАЖИМАЕТ клавишу, держит её, дальше отпускает.
Список keys должен выглядеть примерно так:
[None, 'W', 'A', 'S', None, 'T']
А список delay так:
[5.08, 3.44, 6.02, 7.95, 0.28, 2.56 ]
Это всё к примеру. То есть эта функция должна записать в список клавиш клавиши, которые пользователь нажмёт во время записи, а в список задержки время, которое понадобится, чтобы зажать клавишу или подождать.
у keyboard есть функция record, play, но они не работают. Подскажите, как реализовать задуманное?
Пока код выглядит так
import keyboard
def recording():
print('recording is started!')
events = keyboard.record('esc')
keyboard.play(events)
keyboard.add_hotkey('Ctrl + Alt + 1', recording)
keyboard.wait()
Ответы (1 шт):
В документации сказано, что keyboard.record, как и keyboard.wait, блокирует поток. Если попробовать прервать выполнение вашей программы в момент записи, то в стеке исключений вылезет time.sleep(1e6) (миллион секунд) и последняя строка кода - keyboard.wait().
Если убратьkeyboard.wait() и на его место написать recording(), то функция успешно отрабатывается.
Я не стал слишком заморачиваться и просто запустил вашу функцию recording в параллельном потоке, чтобы keyboard.record блокировал его, а не основной поток, который уже заблокирован keyboard.wait.
# @name 24a434fec8b0433c8a461ff1a86acf7f.py
import keyboard, threading
def _recording():
print('recording is started!')
events = keyboard.record('escape')
keyboard.play(events)
print('recording is finished!')
def recording():
threading.Thread(target=_recording, args=tuple()).start()
keyboard.add_hotkey('Ctrl + Alt + 1', recording)
keyboard.wait()