主窗口前的PyQt5启动画面[重复]
Posted
技术标签:
【中文标题】主窗口前的PyQt5启动画面[重复]【英文标题】:PyQt5 splash screen before main window [duplicate] 【发布时间】:2020-06-21 20:21:36 【问题描述】:我正在尝试创建一个在显示主屏幕之前显示 5 秒的初始屏幕。但是,我希望启动画面与主窗口是同一个窗口,只是中间有不同的图像。
我查看了How to change UI in same window using PyQt5?,但它仍然无法正常工作...
我也尝试过使用 QSplashScreen 类,但我无法让它正常工作。如果有任何困惑,请随时发表评论,我会澄清。
这是我的代码脚本:
# importing libraries
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import *
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setStyleSheet("background-color: black;")
self.setWindowTitle("key")
self.setGeometry(100, 100, 350, 500)
self.UiComponents()
self.show()
def UiComponents(self):
lockButton = QPushButton(self)
lockButton.setGeometry(60, 200, 100, 70)
lockButton.setStyleSheet("border-radius : 10; border : 1px solid white; background-color : #3A3535")
lockButton.setIcon(QIcon('lock.png'))
size = QSize(40, 40)
lockButton.setIconSize(size)
lockButton.clicked.connect(self.clickme)
def clickme(self):
print("pressed")
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
【问题讨论】:
【参考方案1】:试试看:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import *
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setStyleSheet("background-color: black;")
self.setWindowTitle("key")
# self.setGeometry(100, 100, 350, 500)
self.resize(350, 500)
self.UiComponents()
self.show()
def UiComponents(self):
lockButton = QPushButton(self)
lockButton.setGeometry(60, 200, 100, 70)
lockButton.setStyleSheet("border-radius : 10; border : 1px solid white; background-color : #3A3535")
lockButton.setIcon(QIcon('im.png')) # ! 'lock.png'
size = QSize(40, 40)
lockButton.setIconSize(size)
lockButton.clicked.connect(self.clickme)
def clickme(self):
print("pressed")
App = QApplication(sys.argv)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
import time
splash = QSplashScreen()
splash.setPixmap(QPixmap('images/splash_.jpg').scaled(366, 568))
splash.show()
splash.showMessage('<h1 style="color:white;">Welcome to use this PyQt5-SplashScreen</h1>',
Qt.AlignTop | Qt.AlignHCenter, Qt.white)
time.sleep(5)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
window = Window()
splash.finish(window) # +++
sys.exit(App.exec())
只加载图像,然后加载窗口。是否可以在同一个窗口(只是纯黑屏幕)上加载图像,然后加载主窗口?
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import *
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setStyleSheet("background-color: black;")
self.setWindowTitle("key")
# self.setGeometry(100, 100, 350, 500)
self.resize(350, 500)
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.label = QLabel(self)
self.label.resize(350, 500)
self.label.setPixmap(QPixmap('images/splash_.jpg').scaled(350, 500))
QTimer.singleShot(5000, self.UiComponents)
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.show()
def UiComponents(self):
self.label.hide() # +++
lockButton = QPushButton(self)
lockButton.setGeometry(60, 200, 100, 70)
lockButton.setStyleSheet("border-radius : 10; border : 1px solid white; background-color : #3A3535")
lockButton.setIcon(QIcon('im.png')) # ! 'lock.png'
size = QSize(40, 40)
lockButton.setIconSize(size)
lockButton.clicked.connect(self.clickme)
lockButton.show() # +++
def clickme(self):
print("pressed")
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
【讨论】:
当我运行它时,我收到一条消息:QPixmap::scaled: Pixmap is a null pixmap。然后,在 5 秒内什么都没有显示,然后它显示了我的主窗口 @S。尼克 @Hhggg 将mages/splash_.jpg
更改为您的图像。
@Hhggg splash.setPixmap(QPixmap('lock.png').scaled(366, 568))
只加载图像,然后加载窗口。是否可以在同一个窗口(只是纯黑屏)上加载图像,然后加载主窗口? @S。尼克
我不想加载两个不同的窗口...我只希望在主窗口显示@S 之前,这个只有一张图片的加载窗口显示 5 秒钟。尼克以上是关于主窗口前的PyQt5启动画面[重复]的主要内容,如果未能解决你的问题,请参考以下文章