На этом шаге мы рассмотрим один способ задания таймера.
Таймеры позволяют через заданный интервал времени выполнять метод с предопределенным названием timerEvent(). Для назначения таймера используется метод startTimer() класса QObject. Формат метода:
<Id> = <Объект>.startTimer(<Интервал>[, timerType=<Tип таймера>])
Параметр <Интервал> задает промежуток времени в миллисекундах, по истечении которого выполняется метод timerEvent(). Минимальное значение интервала зависит от операционной системы. Если в параметре <Интервал> указать значение 0, то таймер будет срабатывать много раз при отсутствии других необработанных событий.
Необязательный параметр timerType позволяет указать тип таймера в виде одного из атрибутов класса QtCore.Qt:
Метод startTimer() возвращает идентификатор таймера, с помощью которого впоследствии можно остановить таймер.
Формат метода timerEvent() :
timerEvent (self, <Объект класса QTimerEvent>)
Внутри него можно получить идентификатор таймера с помощью метода timerId() объекта класса QTimerEvent.
Чтобы остановить таймер, необходимо воспользоваться методом killTimer() класса QObject. Формат метода:
<Объект>.killTimer (<Id>)
В качестве параметра указывается идентификатор, возвращаемый методом startTimer().
Создадим в окне часы, которые будут отображать текущее системное время с точностью до секунды, и добавим возможность запуска и остановки часов с помощью соответствующих кнопок.
# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtWidgets import time class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.setWindowTitle("Часы в окне") self.resize(200, 100) self.timer_id = 0 self.label = QtWidgets.QLabel("") self.label.setAlignment (QtCore.Qt.AlignHCenter) self.button1 = QtWidgets.QPushButton("Запустить") self.button2 = QtWidgets.QPushButton("Остановить") self.button2.setEnabled(False) vbox = QtWidgets.QVBoxLayout() vbox.addWidget(self.label) vbox.addWidget(self.button1) vbox.addWidget(self.button2) self.setLayout(vbox) self.button1.clicked.connect(self.on_clicked_button1) self.button2.clicked.connect(self.on_clicked_button2) def on_clicked_button1(self): # Задаем интервал в 1 секунду и "приближенный" таймер self.timer_id = self.startTimer(1000, timerType = QtCore.Qt.VeryCoarseTimer) self.button1.setEnabled(False) self.button2.setEnabled(True) def on_clicked_button2(self): if self.timer_id: self.killTimer(self.timer_id) self.timer_id = 0 self.button1.setEnabled(True) self.button2.setEnabled(False) def timerEvent(self, event): self.label.setText(time.strftime("%H:%M:%S")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
На следующем шаге мы закончим изучение этого вопроса.