2013-02-20 70 views
0

我刚刚在我的PyQt应用程序中编写了启动画面,在启动之前显示图像。我用过QSplashscreen。 问题是,图像显示,比方说,一次在20次。在其他情况下,有一个灰色的矩形显示istead。 截图两种情况:为什么QSplashscreen不总是工作?

是否工作: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(但它是侏儒一样的)。

回答

3

这是因为sleep(1)线。要使QSplashScreen正常工作,应该有一个事件循环运行。但是,sleep正在阻止。因此,在sleep完成之前(整整一秒),您不会得到app.exec_()(事件循环)部分。那个'灰色矩形'就是你在输入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() 
+0

谢谢,现在一切工作正常:) – daniel90 2013-02-20 22:41:46

+1

注意QSplashScreen有相当拙劣的bug这意味着除非你有一个主循环,否则你只会得到一个灰色的矩形:https://bugreports.qt-project.org/browse/QTBUG-24910 – xioxox 2013-06-04 18:56:26