Вы должны указать один из родителей для QSplashScreen, в противном случае он будет отображать конструктор этого в родной Qt:
QSplashScreen::QSplashScreen (const QPixmap & pixmap = QPixmap(), Qt::WindowFlags f = 0)
Construct a splash screen that will display the pixmap.
There should be no need to set the widget flags, f, except perhaps Qt::WindowStaysOnTopHint.
Если у вас нет родительского виджета для этого, вы можете назначить QDesktopWidget, как родительская
from PyQt4.QtGui import *
import time
def time_consuming_function():
time.sleep(10)
def main():
app = QApplication(sys.argv)
form = QSplashScreen(QDesktopWidget().screen())
form.showMessage('Please wait ...')
form.resize(1000, 1000)
form.move(0, 0)
form.show()
time_consuming_function()
form.close()
app.exec_()
if __name__ == '__main__':
import sys
main()
Кстати, вы не должны использовать «tiem_consuming_function» с одной и той же нити основной, это будет блокировать поток пользовательского интерфейса, сделать поток UI не в состоянии реагировать на ввод данных пользователем, выглядит как UI замерзает.
Причина, по которой заставка не появляется, заключается в том, что протекторы блокируются функцией «time_consuming_function». И когда функция возвращает форму, закрывается, прежде чем когда-либо будет отображаться. Один из способов - попытаться переместить «time_consuming_function» в другой поток (я не уверен, что это сработает, поскольку оно связано с построением графика). – Michael