Найти - Пользователи
Полная версия: Не отображается картинка в заставке
Начало » GUI » Не отображается картинка в заставке
1
Igor-dis
#!/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()
Появляется окошко заставки, пустое. А картинка мелькает в самый последний момент, перед самым финишем. Если финиш отключен, то картинка на заставке всё равно появляется только с загрузкой основного окна. Как с этим бороться?
Ничего вразумительного ненагуглил.
py.user.next
Где-то скачал когда-то пример (не помню).
#!/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_())
Rodegast
splash.show() отработает не сразу, а только тогда когда поток освободится, а ты его ещё и блокируешь циклом “Имитация задержки на загрузку данных”. Что бы заставка сразу отображалась надо после splash.show() поставить QtGui.QApplication.processEvents()
Igor-dis
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()
Всё страньше и страньше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB