我刚刚在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中也是如此)。
答案 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()