编程语言
首页 > 编程语言> > python – 为什么QSplashscreen并不总是有效?

python – 为什么QSplashscreen并不总是有效?

作者:互联网

我刚刚在我的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)线.要使QSplashScreen正常工作,应该有一个事件循环在运行.但是,睡眠是阻塞的.因此,在睡眠完成之前(整整一秒),您无法访问app.exec_()(事件循环)部分.那个’灰色矩形’是你在QSplashScreen甚至可以自己绘制之前进入睡眠的情况.

对于正常情况,您将不会遇到此问题,因为您将在Qt内等待并且事件循环将运行.如果你想’模拟’等待,请小睡一段时间并强制应用程序使用.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()

标签:python,pyqt,splash-screen
来源: https://codeday.me/bug/20191001/1838420.html