На этом шаге мы рассмотрим алгоритм вывода заставки.
В больших приложениях загрузка начальных данных может занимать продолжительное время, в течение которого принято выводить окно-заставку, в котором отображается процесс загрузки. По окончании инициализации приложения окно-заставка скрывается и отображается главное окно.
Для вывода окна-заставки в PyQt предназначен класс QSplashScreen из модуля QtWidgets. Конструктор класса имеет следующие форматы:
<Объект> = QSplashScreen([<Изображение>][, flags=<Тип окна>]) <Объект> = QSplashScreen(<Родитель>[, <Изображение>][, flags=<Тип окна>])
Параметр <Родитель> позволяет указать ссылку на родительский компонент. В параметре <Изображение> указывается ссылка на изображение (экземпляр класса QPixmap, объявленного в модуле QtGui), которое будет отображаться на заставке. Конструктору класса QPixmap можно передать путь к файлу с изображением. Параметр flags предназначен для указания типа окна - например, чтобы заставка отображалась поверх всех остальных окон, следует передать флаг WindowStaysOnTopHint.
Класс QSplashScreen поддерживает следующие методы:
Ниже приведен пример кода, выводящего заставку. А на рисунке 1 можно увидеть эту заставку воочию.
# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets import time class MyWindow(QtWidgets.QPushButton): def __init__(self): QtWidgets.QPushButton.__init__(self) self.setText("Закрыть окно") self.clicked.connect(QtWidgets.qApp.quit) def load_data(self, sp): for i in range(1, 11): # Имитируем процесс time.sleep(2) # Что-то загружаем sp.showMessage("Загрузка данных... {0}%".format(i * 10), QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom, QtCore.Qt.white) QtWidgets.qApp.processEvents() # Запускаем оборот цикла if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) splash = QtWidgets.QSplashScreen(QtGui.QPixmap("img1.jpg") ) splash.showMessage("Загрузка данных... 0%", QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom, QtCore.Qt.white) splash.show() # Отображаем заставку QtWidgets.qApp.processEvents() # Запускаем оборот цикла window = MyWindow() window.setWindowTitle("Использование класса QSplashScreen") window.resize(300, 30) window.load_data(splash) # Загружаем данные window.show() splash.finish(window) # Скрываем заставку sys.exit(app.exec_())
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим доступ к документации.