Why QSplashscreen does not always work?

半腔热情 提交于 2019-11-29 05:21:21

It's because of the sleep(1) line. For QSplashScreen to work properly, there should be an event loop running. However, sleep is blocking. So you don't get to app.exec_() (event loop) part before sleep finishes (for a whole second). That 'gray rectangle' is the case where you enter sleep before QSplashScreen could even paint itself.

For the normal case, you won't have this problem because you'll be waiting within Qt and the event loop will be running. If you want to 'simulate' a wait, sleep for small intervals and force the app to do its job with .processEvents():

# -*- coding: utf-8 -*-
import sys
from time import time, sleep
from PyQt4.QtGui import QApplication, QSplashScreen, QPixmap

from gui.gui import MainWindow

def main():
    app = QApplication(sys.argv)
    start = time() 
    splash = QSplashScreen(QPixmap("aquaticon/images/splash_screen.jpg"))
    splash.show()
    while time() - start < 1:
        sleep(0.001)
        app.processEvents()
    win = MainWindow()
    splash.finish(win)
    win.show()
    app.exec_()

if __name__ == "__main__":
    main()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!