На этом шаге мы рассмотрим еще один способ задания таймера.
Вместо методов startTimer() и killTimer() класса QObject можно воспользоваться классом QTimer из модуля QtCore. Конструктор класса имеет следующий формат:
<Объект> = QTimer ([parent=None])
Методы класса:
Переделаем пример из предыдущего шага и используем класс QTimer вместо методов startTimer() и killTimer().
# -*- 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("Использование класса QTimer") self.resize(200, 100) 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) self.timer = QtCore.QTimer() self.timer.timeout.connect(self.on_timeout) def on_clicked_button1(self): self.timer.start(1000) # 1 секунда self.button1.setEnabled(False) self.button2.setEnabled(True) def on_clicked_button2(self): self.timer.stop() self.button1.setEnabled(True) self.button2.setEnabled(False) def on_timeout(self): 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. Результат работы приложения
Статический метод singleShot() класса QTimer запускает таймер, настраивает его для однократного срабатывания и указывает функцию или метод, который будет вызван по истечении заданного интервала. Формат вызова этого метода следующий;
singleShot (<Интервал>[, <Тип таймера>], <Функция или метод>)
Примеры использования этого статического метода:
QtCore.QTimer.singleShot(1000, self.on_timeout) QtCore.QTimer.singleShot(1000, QtWidgets.qApp.quit)
На следующем шаге мы рассмотрим перехват всех событий.