Подсчет времени нажатия на кнопки
В данном куске кода я отображаю нажатия на кнопки, как можно считать сколько нажата та или иная кнопка
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:
...