Шаг 21.
Библиотека PyQt5.
Знакомство с PyQt5. Вывод заставки

    На этом шаге мы рассмотрим алгоритм вывода заставки.

    В больших приложениях загрузка начальных данных может занимать продолжительное время, в течение которого принято выводить окно-заставку, в котором отображается процесс загрузки. По окончании инициализации приложения окно-заставка скрывается и отображается главное окно.

    Для вывода окна-заставки в 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. Результат работы приложения

    На следующем шаге мы рассмотрим доступ к документации.




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