代码之家  ›  专栏  ›  技术社区  ›  daniel90

为什么QSplashscreen不总是工作?

  •  1
  • daniel90  · 技术社区  · 12 年前

    我刚刚在PyQt应用程序中对启动屏幕进行了编码,以便在开始之前显示一个图像。我用过QSplashscreen。 问题是图像被显示,比方说,20次中显示一次。在其他情况下,会显示一个灰色矩形。 两种情况的屏幕截图:

    确实有效: http://dl.getdropbox.com/u/1088961/prob2.jpg

    不起作用: http://dl.getdropbox.com/u/1088961/prob1.jpg

    我试图延迟开始窗口,但如果灰色矩形变成图片,它就在消失之前(即使我把所有东西都延迟了10秒)。

    这是我的代码:

    # -*- 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()
        if time() - start < 1:
            sleep(1)
        win = MainWindow()
        splash.finish(win)
        win.show()
        app.exec_()
    
    if __name__ == "__main__":
        main()
    

    我在Fluxbox中使用Debian Linux(但在Gnome中是一样的)。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Avaris    12 年前

    这是因为 sleep(1) 线对于 QSplashScreen 为了正常工作,应该运行一个事件循环。然而 sleep 正在阻止。所以你不能 app.exec_() (事件循环)之前的部分 睡觉 完成(整整一秒钟)。“灰色矩形”就是您输入的情况 睡觉 之前 QSplash屏幕 甚至可以自己画画。

    对于正常情况,您不会有这个问题,因为您将在Qt中等待,并且事件循环将运行。如果您想“模拟”等待,请短时间睡眠并强制 app 做它的工作 .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()