• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Заметка [Python] - #5 Вывод заставки на PyQt5

Темы, которые НЕ подходят по объему под префикс "Статья"

Muxtar

Green Team
02.06.2021
132
64
BIT
0

Начало

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

Для вывода заставки в PyQt5 предназначен класс QSplashScreen(Из модуля QtWidgets), который позволяет нам сделать заставку, он имеет вот такой формат:

<Объект> = QSplashScreen([<Изображение>][, flags=<Тип окна>[)
<Объект> = QSplashScreen(<Родитель>[, <Изображение>] [, flags=<Тип окна>])


Параметр <Родитель> позволяет указать ссылку на родительский компонент. В параметре <Изображение> указывается ссылка на изображение, которое будет отображаться на заставке. Конструктору класса QPixmap можно передать путь к фалу с изображением. Параметр flags предназначен для указание типа окна.

Класс QSplashScreen поддерживает вот такие методы:

  • show() - отображает заставку;
  • finish() - закрывает заставку;
  • showMessage() - выводит сообшение в заставке;
  • clearMessage() - удаляет надпись;
  • setPixmap - Изменяет изображение;
  • pixmap() - возвращает изображение виде экземпляра.

Пишем код

Создадим простой код, который выводит заставку:

Python:
from PyQt5 import QtCore, QtGui, QtWidgets # Импортируем необходимые модули;
import time
import sys

class MyWindow(QtWidgets.QPushButton): # Создаем класс и простую кнопку;
    def __init__(self):
        QtWidgets.QPushButton.__init__(self)
        self.setText('close...') # Текст кнопки;
        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.black)
            QtWidgets.qApp.processEvents() # Запускаем оборт цикла;

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    splash = QtWidgets.QSplashScreen(QtGui.QPixmap('img.jpg')) # Загружаем изображение;
    splash.showMessage('Загрузка данных...{0}%',
                   QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom, QtCore.Qt.black)
    splash.show() # Отображаем заставку;
    QtWidgets.qApp.processEvents() # Оборот цикла;
    window = MyWindow() # Создаём экземпляр;
    window.setWindowTitle('Заставка')
    window.resize(300, 30)
    window.load_data(splash) # Загружаем данные;
    window.show()
    splash.finish(window)
 
    sys.exit(app.exec_())

Если запустить код, то вы увидите вот такой результат:
Снимок экрана от 2021-06-30 17-01-50(1).png


Тоесть мы создали код который выводит заставку с изображение, и в этой заставке с помощью showMessage() сделал простой текст, дальше с помощью AlignBottom указываем местоположение и даем ему цвет black, когда он дойдет до 100% или просто завершится, то метод finish вскроет его, и отобразится окно с кнопкой для выхода.

Итоги

Мы смогли создать простую окно-заставку с изображением. Надеюсь данная статья, была полезна для вас.

[Буду рад если найдете ошибки в текст или в коде!]
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!