Окно загрузки главного окна
Здрывствуйте, я хочу сделать чтобы перед открытием приложения на 5 секунд или до открытия главного окна открывалось загрузочное окно, в котором будет написано "Ожидайте загрузки приложения" и проигрывалась какая нибудь гифка.
Вот прямо что-то похожее как у дискорда. Я сделал это загрузочное окно (eow.py), может быть через него это как-то можно сделать.
unt.py - главное окно
eow.py - загрузочное окно
unt.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(732, 538)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 30, 731, 51))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(30)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(0, 120, 711, 161))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(11)
self.lineEdit.setFont(font)
self.lineEdit.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.lineEdit.setObjectName("lineEdit")
self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.horizontalScrollBar.setGeometry(QtCore.QRect(0, 496, 731, 20))
self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
self.horizontalScrollBar.setObjectName("horizontalScrollBar")
self.verticalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.verticalScrollBar.setGeometry(QtCore.QRect(711, 0, 20, 501))
self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
self.verticalScrollBar.setObjectName("verticalScrollBar")
self.spinBox = QtWidgets.QSpinBox(self.centralwidget)
self.spinBox.setGeometry(QtCore.QRect(0, 280, 711, 211))
font = QtGui.QFont()
font.setPointSize(50)
self.spinBox.setFont(font)
self.spinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
self.spinBox.setObjectName("spinBox")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(0, 90, 711, 31))
self.progressBar.setStyleSheet("")
self.progressBar.setProperty("value", 22)
self.progressBar.setTextVisible(False)
self.progressBar.setOrientation(QtCore.Qt.Horizontal)
self.progressBar.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar.setObjectName("progressBar")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 732, 22))
self.menubar.setObjectName("menubar")
self.menuF = QtWidgets.QMenu(self.menubar)
self.menuF.setObjectName("menuF")
self.menuRE = QtWidgets.QMenu(self.menuF)
self.menuRE.setObjectName("menuRE")
self.menuRE1_2 = QtWidgets.QMenu(self.menuRE)
self.menuRE1_2.setObjectName("menuRE1_2")
self.menuRE_2 = QtWidgets.QMenu(self.menuF)
self.menuRE_2.setObjectName("menuRE_2")
self.menuRE1 = QtWidgets.QMenu(self.menuRE_2)
self.menuRE1.setObjectName("menuRE1")
MainWindow.setMenuBar(self.menubar)
self.actionRE2 = QtWidgets.QAction(MainWindow)
self.actionRE2.setObjectName("actionRE2")
self.actionRE2_2 = QtWidgets.QAction(MainWindow)
self.actionRE2_2.setObjectName("actionRE2_2")
self.menuRE1_2.addAction(self.actionRE2_2)
self.menuRE.addAction(self.menuRE1_2.menuAction())
self.menuRE1.addAction(self.actionRE2)
self.menuRE_2.addAction(self.menuRE1.menuAction())
self.menuF.addAction(self.menuRE_2.menuAction())
self.menuF.addAction(self.menuRE.menuAction())
self.menubar.addAction(self.menuF.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "ГЛАВНОЕ ОКНО"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Пишите..."))
self.menuF.setTitle(_translate("MainWindow", "F"))
self.menuRE.setTitle(_translate("MainWindow", "RE"))
self.menuRE1_2.setTitle(_translate("MainWindow", "RE1"))
self.menuRE_2.setTitle(_translate("MainWindow", "RE"))
self.menuRE1.setTitle(_translate("MainWindow", "RE1"))
self.actionRE2.setText(_translate("MainWindow", "RE2"))
self.actionRE2_2.setText(_translate("MainWindow", "RE2"))
class Exm(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = Exm()
window.show()
sys.exit(app.exec_())
eow.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(342, 355)
MainWindow.setStyleSheet("background-color: rgb(79, 79, 79);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 280, 331, 21))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(14)
self.label.setFont(font)
self.label.setStyleSheet("color: rgb(255, 255, 255);")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(0, 0, 341, 251))
self.label_2.setStyleSheet("background-color: transparent;")
self.label_2.setText("")
self.label_2.setObjectName("label_2")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Ожидайте открытия программы..."))
class Exm1(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = Exm1()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Сначала мы создаем экземпляр элемента управления QSplashScreen,
вызываем метод setPixmap() для установки изображения, а
затем вызываем метод show() для его отображения.
Метод showMessage(str, alignment, color) отображает текст на экране запуска программы.
Выравнивание - это положение текста на заставке, здесь мы устанавливаем
вверху по центру, color - цвет текста мы устанавливаем его белым.
Поскольку запуск программы не занимает много времени, заставка будет мигать,
поэтому мы добавляем сюда строку QtCore.QThread.msleep(5000), чтобы сделать паузу на 5 секунд, чтобы увидеть эффект.
Когда мы решим, что можем начать отображать главное окно, мы можем вызвать finish(),
чтобы передать экземпляр главного окна.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(732, 538)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 30, 731, 51))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(30)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(0, 120, 711, 161))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(11)
self.lineEdit.setFont(font)
self.lineEdit.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.lineEdit.setObjectName("lineEdit")
self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.horizontalScrollBar.setGeometry(QtCore.QRect(0, 496, 731, 20))
self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
self.horizontalScrollBar.setObjectName("horizontalScrollBar")
self.verticalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.verticalScrollBar.setGeometry(QtCore.QRect(711, 0, 20, 501))
self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
self.verticalScrollBar.setObjectName("verticalScrollBar")
self.spinBox = QtWidgets.QSpinBox(self.centralwidget)
self.spinBox.setGeometry(QtCore.QRect(0, 280, 711, 211))
font = QtGui.QFont()
font.setPointSize(50)
self.spinBox.setFont(font)
self.spinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
self.spinBox.setObjectName("spinBox")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(0, 90, 711, 31))
self.progressBar.setStyleSheet("")
self.progressBar.setProperty("value", 22)
self.progressBar.setTextVisible(False)
self.progressBar.setOrientation(QtCore.Qt.Horizontal)
self.progressBar.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar.setObjectName("progressBar")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 732, 22))
self.menubar.setObjectName("menubar")
self.menuF = QtWidgets.QMenu(self.menubar)
self.menuF.setObjectName("menuF")
self.menuRE = QtWidgets.QMenu(self.menuF)
self.menuRE.setObjectName("menuRE")
self.menuRE1_2 = QtWidgets.QMenu(self.menuRE)
self.menuRE1_2.setObjectName("menuRE1_2")
self.menuRE_2 = QtWidgets.QMenu(self.menuF)
self.menuRE_2.setObjectName("menuRE_2")
self.menuRE1 = QtWidgets.QMenu(self.menuRE_2)
self.menuRE1.setObjectName("menuRE1")
MainWindow.setMenuBar(self.menubar)
self.actionRE2 = QtWidgets.QAction(MainWindow)
self.actionRE2.setObjectName("actionRE2")
self.actionRE2_2 = QtWidgets.QAction(MainWindow)
self.actionRE2_2.setObjectName("actionRE2_2")
self.menuRE1_2.addAction(self.actionRE2_2)
self.menuRE.addAction(self.menuRE1_2.menuAction())
self.menuRE1.addAction(self.actionRE2)
self.menuRE_2.addAction(self.menuRE1.menuAction())
self.menuF.addAction(self.menuRE_2.menuAction())
self.menuF.addAction(self.menuRE.menuAction())
self.menubar.addAction(self.menuF.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "ГЛАВНОЕ ОКНО"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Пишите..."))
self.menuF.setTitle(_translate("MainWindow", "F"))
self.menuRE.setTitle(_translate("MainWindow", "RE"))
self.menuRE1_2.setTitle(_translate("MainWindow", "RE1"))
self.menuRE_2.setTitle(_translate("MainWindow", "RE"))
self.menuRE1.setTitle(_translate("MainWindow", "RE1"))
self.actionRE2.setText(_translate("MainWindow", "RE2"))
self.actionRE2_2.setText(_translate("MainWindow", "RE2"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
splash = QtWidgets.QSplashScreen()
splash.setPixmap(QtGui.QPixmap('images/splash.jpg'))
splash.show()
splash.showMessage('<h1 style="color:white;">Добро пожаловать в этот заставка, сделанная в PyQt5</h1>',
QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter, QtCore.Qt.white)
QtCore.QThread.msleep(5000) #
demo = MainWindow()
demo.show()
splash.finish(demo)
sys.exit(app.exec_())
Update
возник вопрос, как вставить гиф, если просто прописать вместо jpg то она выглядит как обычная картинка
Попробую показать пример более-менее реальной задачи.
Note: Вы должны выполнить трудоемкую задачу в другом потоке и подать сигнал, что задача завершена.
import sys
import threading
from PyQt5 import QtCore, QtWidgets, QtGui
def consuming_work(arg1, arg2):
import time
print(arg1, arg2)
time.sleep(5) # Какая-то трудоемкая задача
print("finish")
class WorkerMessageBox(QtWidgets.QMessageBox):
started = QtCore.pyqtSignal()
finished = QtCore.pyqtSignal()
def __init__(self, parent=None):
super().__init__(parent)
self.finished.connect(self.accept)
self.move(450, 420)
def execute(self, func, args):
threading.Thread(target=self._execute, args=(func, args,), daemon=True).start()
return self.exec_()
def _execute(self, func, args):
self.started.emit()
func(*args) # Вызываем трудоемкую задачу
self.finished.emit()
class GifLabel(QtWidgets.QLabel):
def __init__(self, *args, **kwargs):
QtWidgets.QLabel.__init__(self, *args, **kwargs)
self.setWindowFlags(
QtCore.Qt.Window
| QtCore.Qt.Tool
| QtCore.Qt.FramelessWindowHint
| QtCore.Qt.WindowStaysOnTopHint
| QtCore.Qt.X11BypassWindowManagerHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
self.movie = QtGui.QMovie('D:/_Qt/__Qt/loading.gif')
self.setMovie(self.movie)
self.movie.start()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(732, 538)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 30, 731, 51))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(30)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(0, 120, 711, 161))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(11)
self.lineEdit.setFont(font)
self.lineEdit.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.lineEdit.setObjectName("lineEdit")
self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.horizontalScrollBar.setGeometry(QtCore.QRect(0, 496, 731, 20))
self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
self.horizontalScrollBar.setObjectName("horizontalScrollBar")
self.verticalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.verticalScrollBar.setGeometry(QtCore.QRect(711, 0, 20, 501))
self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
self.verticalScrollBar.setObjectName("verticalScrollBar")
self.spinBox = QtWidgets.QSpinBox(self.centralwidget)
self.spinBox.setGeometry(QtCore.QRect(0, 280, 711, 211))
font = QtGui.QFont()
font.setPointSize(50)
self.spinBox.setFont(font)
self.spinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
self.spinBox.setObjectName("spinBox")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(0, 90, 711, 31))
self.progressBar.setStyleSheet("")
self.progressBar.setProperty("value", 22)
self.progressBar.setTextVisible(False)
self.progressBar.setOrientation(QtCore.Qt.Horizontal)
self.progressBar.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar.setObjectName("progressBar")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 732, 22))
self.menubar.setObjectName("menubar")
self.menuF = QtWidgets.QMenu(self.menubar)
self.menuF.setObjectName("menuF")
self.menuRE = QtWidgets.QMenu(self.menuF)
self.menuRE.setObjectName("menuRE")
self.menuRE1_2 = QtWidgets.QMenu(self.menuRE)
self.menuRE1_2.setObjectName("menuRE1_2")
self.menuRE_2 = QtWidgets.QMenu(self.menuF)
self.menuRE_2.setObjectName("menuRE_2")
self.menuRE1 = QtWidgets.QMenu(self.menuRE_2)
self.menuRE1.setObjectName("menuRE1")
MainWindow.setMenuBar(self.menubar)
self.actionRE2 = QtWidgets.QAction(MainWindow)
self.actionRE2.setObjectName("actionRE2")
self.actionRE2_2 = QtWidgets.QAction(MainWindow)
self.actionRE2_2.setObjectName("actionRE2_2")
self.menuRE1_2.addAction(self.actionRE2_2)
self.menuRE.addAction(self.menuRE1_2.menuAction())
self.menuRE1.addAction(self.actionRE2)
self.menuRE_2.addAction(self.menuRE1.menuAction())
self.menuF.addAction(self.menuRE_2.menuAction())
self.menuF.addAction(self.menuRE.menuAction())
self.menubar.addAction(self.menuF.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "ГЛАВНОЕ ОКНО"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Пишите..."))
self.menuF.setTitle(_translate("MainWindow", "F"))
self.menuRE.setTitle(_translate("MainWindow", "RE"))
self.menuRE1_2.setTitle(_translate("MainWindow", "RE1"))
self.menuRE_2.setTitle(_translate("MainWindow", "RE"))
self.menuRE1.setTitle(_translate("MainWindow", "RE1"))
self.actionRE2.setText(_translate("MainWindow", "RE2"))
self.actionRE2_2.setText(_translate("MainWindow", "RE2"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
gifLabel = GifLabel()
gifLabel.show()
msgBox = WorkerMessageBox()
msgBox.setWindowTitle("Working ....")
msgBox.setText("Работает, пожалуйста подождите ...")
msgBox.setStandardButtons(QtWidgets.QMessageBox.NoButton)
msgBox.execute(consuming_work, ["Stack", "Overflow"])
demo = MainWindow()
gifLabel.movie.stop()
gifLabel.hide()
demo.show()
sys.exit(app.exec_())


