Источник ошибки
Похоже, ваша проблема в том, что строка timer = time.perf_counter_ns()
в press
не выполняет то, что вы ожидаете.
Переменные, назначенные внутри Python функций, скрывают переменные с тем же именем из родительской области (областей). Это означает, что вы назначаете локальную переменную с именем timer
, а не глобальную переменную timer
, как вы ожидаете. Когда вы вычисляете timer-timer2
в release
, вы используете глобальную переменную timer
, значение которой никогда не меняется с 0
.
Решение
Оберните таймеры в класс, который содержит timer
в качестве члена.
class Timer:
def __init__(self):
self.timer = None
def press(self, key):
self.timer = time.perf_counter_ns()
def release(self, key):
timer2 = time.perf_counter_ns()
print(timer2 - self.timer)
timer = Timer()
with Listener(on_press=timer.press, on_release=timer.release) as listener:
listener.join()
Другой способ - просто использовать глобальную версию timer
в вашем коде. Это считается плохой практикой, но вот как вы это сделаете.
def press(Key):
global timer
timer = time.perf_counter_ns()