Шаг 53.
Библиотека PyQt5.
Обработка сигналов и событий. Использование таймеров (окончание)

    На этом шаге мы рассмотрим еще один способ задания таймера.

    Вместо методов 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)

    На следующем шаге мы рассмотрим перехват всех событий.




Предыдущий шаг Содержание Следующий шаг