为什么QSplashscreen并不总是有效?

时间:2013-02-20 20:55:50

标签: python pyqt splash-screen

我刚刚在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()

我正在使用Debian Linux和Fluxbox(但在Gnome中也是如此)。

1 个答案:

答案 0 :(得分:3)

这是因为sleep(1)行。要使QSplashScreen正常工作,应该有一个事件循环在运行。但是,sleep正在阻止。因此,在app.exec_()完成之前(整整一秒钟),您不会进入sleep(事件循环)部分。那个“灰色矩形”是指sleep甚至可以在自己画画之前输入QSplashScreen的情况。

对于正常情况,您将不会遇到此问题,因为您将在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()