计时器在程序的开始而不是开始点启动



嘿,我一直在使用python时间类开发计时器。时间应该在用户按下F7后开始,但由于某种原因,我一运行程序就开始计数。

from pynput import keyboard
from time import perf_counter
from time_sig import signature

print("Welcome to your smart timer")
datafile = open('data', 'a')
ex_name = input("Please type in the exercise type: ")
datafile.write("nStarted exercise: " + ex_name.upper())
print("Click F7 to start, F8 every time you finished a question and F9 to stop")
count = 0

def execute_F7():
print("starting timer")
t = perf_counter()
def execute_F8():
print("finished question")
tic = perf_counter
transfer = signature(tic)
global count
count += 1
datafile.write("nfinished question number " + str(count) + " on time: " + str(signature.convert(transfer)) + " in (" + str(signature.q_time(transfer)) + ")")
print(str(signature.convert(transfer)))
def execute_F4():
tic = perf_counter
transfer = signature(tic)
print(str(signature.convert(transfer)))
datafile.write("nfinished question number " + str(count) + " on time: " + str(signature.convert(transfer)) + " in (" + str(signature.q_time(transfer)) + ")")
datafile.write("nWorkout done!")
print("Workout done!")
exit()

def on_press(key):
if key == keyboard.Key.f7:
execute_F7()
elif key == keyboard.Key.f8:
execute_F8()
elif key == keyboard.Key.f4:
execute_F4()

with keyboard.Listener(on_press=on_press) as listener:
listener.join()

喜欢任何帮助,谢谢!

perf_counter始终在后台运行;它的绝对值是未定义的,但根据你所看到的,我预计它从0开始。要为特定事件计时,需要从早期的参考值中减去perf_counter()。类似于:

from time import perf_counter
from typing import Optional

class Stopwatch:
"""Measures elapsed time in seconds."""
def __init__(self):
self._start: Optional[float] = None
def start(self) -> None:
"""Starts the stopwatch."""
self._start = perf_counter()
def stop(self) -> float:
"""Stops the stopwatch, returning the elapsed time."""
assert self._start is not None, "Missing call to start()"
elapsed = perf_counter() - self._start
self._start = None
return elapsed

最新更新