таймер запускается в начале программы вместо начальной точки - PullRequest
0 голосов
/ 27 апреля 2020

эй, я работал над таймером, используя 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()

люблю любую помощь, спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...