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