Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Не отображается картинка в заставке [RSS Feed]

#1 Окт. 28, 2015 06:57:33

Igor-dis
Зарегистрирован: 2014-12-14
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отображается картинка в заставке

#!/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()
Появляется окошко заставки, пустое. А картинка мелькает в самый последний момент, перед самым финишем. Если финиш отключен, то картинка на заставке всё равно появляется только с загрузкой основного окна. Как с этим бороться?
Ничего вразумительного ненагуглил.

Офлайн

#2 Окт. 28, 2015 10:51:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Не отображается картинка в заставке

Где-то скачал когда-то пример (не помню).

#!/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)

Офлайн

#3 Окт. 28, 2015 20:01:38

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Не отображается картинка в заставке

splash.show() отработает не сразу, а только тогда когда поток освободится, а ты его ещё и блокируешь циклом “Имитация задержки на загрузку данных”. Что бы заставка сразу отображалась надо после splash.show() поставить QtGui.QApplication.processEvents()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Окт. 28, 2015 20:11:41)

Офлайн

#4 Окт. 29, 2015 07:48:07

Igor-dis
Зарегистрирован: 2014-12-14
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отображается картинка в заставке

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)

Офлайн

  • Начало
  • » GUI
  • » Не отображается картинка в заставке[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version