#python #python-3.x #python-keyboard
Вопрос:
Мой код таков:
import keyboard
pressed = ""
def on_key_press():
print("Key pressed.")
global pressed
# Took me 1 hour to figure out this.
if charset.chars.__contains__(keyboard.read_key()):
print("processing slangs...")
print("*process*")
else:
print("registered key.")
pressed = keyboard.read_key()
print(pressed)
keyboard.on_press(on_key_press())
keyboard.wait()
Я запустил его как root.
Когда я нажимаю клавишу, она печатает ключ по назначению.
Но когда я нажимаю любую клавишу сразу после этого, она просто возвращает ошибку, вот так:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/keyboard/_generic.py", line 22, in invoke_handlers
if handler(event):
File "/usr/local/lib/python3.9/dist-packages/keyboard/__init__.py", line 474, in <lambda>
return hook(lambda e: e.event_type == KEY_UP or callback(e), suppress=suppress)
TypeError: 'NoneType' object is not callable
и он продолжает печатать подобные ошибки, независимо от того, какую клавишу я нажал.
Пожалуйста, помогите.
Ответ №1:
Я думаю, что единственное, что вам нужно, это удалить скобки при вызове on_key_press
функции
keyboard.on_press(on_key_press())
к этому:
keyboard.on_press(on_key_press)
я предполагаю, что метод keyboard.on_press
принимает в качестве аргумента функцию, а не вызываемый объект
Комментарии:
1. Вы запустили код
TypeError: on_key_press() takes 0 positional arguments but 1 was given
Ответ №2:
не читать документы-это как
Функция keyboard.on_press()
вызывает обратный вызов, а не функцию. Этот код показывает, что:
import keyboard
def test(a):
print(a)
keyboard.on_press(test)
keyboard.wait()
Когда вы нажимаете случайные клавиши, он распечатывается KeyboardEvent(<key> down)
. Строку ключа можно извлечь с помощью keyboard.read_key()
.