【问题标题】:PyQt5 splash screen before main window [duplicate]主窗口前的PyQt5启动画面[重复]
【发布时间】: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()) 

【问题讨论】:

    标签: python pyqt5


    【解决方案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 秒钟。尼克
    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多