Форум сайта python.su
#!/usr/bin/env python # -*- coding: utf-8 -*- # # proba_qt_1.py # from PyQt4 import QtGui from PyQt4.QtCore import Qt#, SIGNAL import sys def main(): app = QtGui.QApplication(sys.argv) splash = QtGui.QSplashScreen(QtGui.QPixmap("splash.png"), flags = Qt.WindowStaysOnTopHint) splash.show() wind = QtGui.QWidget(flags = Qt.Window) wind.setWindowIcon(QtGui.QIcon("icon.svg")) wind.setWindowTitle('Simple') for i in range (100000): # Имитация задержки на загрузку данных print(i) #splash.finish(wind) wind.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
Офлайн
Где-то скачал когда-то пример (не помню).
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from PyQt4 import QtGui from PyQt4.QtCore import Qt, SIGNAL import time class MyWindow(QtGui.QPushButton): def __init__(self): QtGui.QPushButton.__init__(self) self.setText("Закрыть окно") self.connect(self, SIGNAL("clicked()"), QtGui.qApp.quit) def load_data(self, sp): for i in range(1, 11): # Имитируем процесс time.sleep(2) # Что-то загружаем sp.showMessage("Загрузка данных... {0}%".format(i * 10), Qt.AlignHCenter | Qt.AlignBottom, Qt.black) QtGui.qApp.processEvents() # Запускаем оборот цикла if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) splash = QtGui.QSplashScreen(QtGui.QPixmap("img.png")) splash.showMessage("Загрузка данных... 0%", Qt.AlignHCenter | Qt.AlignBottom, Qt.black) splash.show() # Отображаем заставку QtGui.qApp.processEvents() # Запускаем оборот цикла window = MyWindow() window.setWindowTitle("Использование класса QSplashScreen") window.resize(300, 30) window.load_data(splash) # Загружаем данные window.show() splash.finish(window) # Скрываем заставку sys.exit(app.exec_())
Отредактировано py.user.next (Окт. 28, 2015 10:53:02)
Офлайн
splash.show() отработает не сразу, а только тогда когда поток освободится, а ты его ещё и блокируешь циклом “Имитация задержки на загрузку данных”. Что бы заставка сразу отображалась надо после splash.show() поставить QtGui.QApplication.processEvents()
Отредактировано Rodegast (Окт. 28, 2015 20:11:41)
Офлайн
RodegastНе помогло. Но! Методом научного втыка когда добавил его в цикл имитации загрузки, заставка стала появляться нормально.
Что бы заставка сразу отображалась надо после splash.show() поставить QtGui.QApplication.processEvents()
#!/usr/bin/env python # -*- coding: utf-8 -*- # # proba_qt_1.py # # from PyQt4 import QtGui from PyQt4.QtCore import Qt#, SIGNAL import sys, time def main(): app = QtGui.QApplication(sys.argv) splash = QtGui.QSplashScreen(QtGui.QPixmap("splash1.png"), flags = Qt.WindowStaysOnTopHint) splash.show() QtGui.QApplication.processEvents() wind = QtGui.QWidget(#flags = Qt.Widget flags = Qt.Window) wind.setWindowIcon(QtGui.QIcon("icon.svg")) wind.setWindowTitle('Simple') for i in range (1, 11): # Имитация задержки на загрузку данных message = (u"Загрузка данных " + str(i*10) + "%") splash.showMessage(message) time.sleep(1) QtGui.QApplication.processEvents() splash.finish(wind) wind.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
Отредактировано Igor-dis (Окт. 29, 2015 07:48:45)
Офлайн