Подсчет времени нажатия на кнопки

В данном куске кода я отображаю нажатия на кнопки, как можно считать сколько нажата та или иная кнопка

https://gist.github.com/kristina-loh/8e6f9bf7e6edc416ce6f15b149d56309

Не получилось весь код поместить в вопрос, т.к.:

Максимальная длина тела 30000 символов; вы ввели 46286.


Ответы (1 шт):

Автор решения: gil9red

Добавил словарь для подсчета времени нажатия на кнопку

Обратите внимание на проверку event.isAutoRepeat(), без нее не будет понятно было ли одиночное нажатие или кнопка уже была зажата какое-то время

Выделил важные места:

class Example(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.prev_key = []

        self.key_by_time = dict()
        # ^^^^^^^^^^^^^^^^^^^^^^^
    ...

    def keyPressEvent(self, event):
        _key, _keys = self.keyevent_to_string(event)
        # раскомментируйте строку  ниже, чтобы увидеть что происходит
        print(f'[keyPressEvent] {_key}, {event.text()}, {event.key()}, {_keys}')

        key = event.key()

        if not event.isAutoRepeat() and key not in self.key_by_time:
            self.key_by_time[key] = time.perf_counter()
        # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        if self.prev_key:
        ...

    def keyReleaseEvent(self, event):
        _key, _keys = self.keyevent_to_string(event)
        # раскомментируйте строку  ниже, чтобы увидеть что происходит
        print(f'[keyReleaseEvent] {_key}, {event.text()}, {event.key()}, {_keys}')

        key = event.key()

        if not event.isAutoRepeat() and key in self.key_by_time:
            t = self.key_by_time.pop(key)
            print(f'Кнопка {key!r} была нажата {time.perf_counter() - t:.2f} секунд')
        # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        if self.prev_key:
        ...
→ Ссылка