为什么QSplashscreen并不总是工作?(Why QSplashscreen does not

2019-07-20 05:51发布

我刚刚编码的启动画面在我的PyQt的应用程序,以显示开始之前的图像。 我用QSplashscreen。 问题是图像显示,比方说,曾经在20倍。 在其它情况下有一个灰色的矩形显示istead。 这两种情况下截图:

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

Answer 1:

这是因为的sleep(1)线。 对于QSplashScreen正常工作,应该有一个事件循环运行。 然而, sleep阻塞。 所以,你没有得到app.exec_()之前(事件循环)部分sleep结束(对一整秒)。 那灰色的矩形“是你进入的情况下sleepQSplashScreen甚至可以画自己。

对于正常的情况下,你不会有这个问题,因为我们将在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()


文章来源: Why QSplashscreen does not always work?