主窗口前的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启动画面[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5开发小记,如何实现程序启动画面和退出提示?

启动画面的延迟窗口

Qt Quick Controls 2 启动画面

在 Unity 中,如何停止“显示 Unity 启动画面”的弹出窗口

启动画面后的白色屏幕,离子2 [重复]

打开aws软件加载画面卡住