Найти - Пользователи
Полная версия: PySide, PyQt заставка
Начало » GUI » PySide, PyQt заставка
1
Lestoroer
Первый запуск идет секунд 12 , ставлю приблизительное время выведения заставки 8 секунд, но второй запуск длиться порядка 0,1сек (библиотеки висят в процессах винды и прогрузились), но при этом заставка также выводится 8секунд. Как сделать так, чтобы программа понимала когда надо показывать заставку, а когда нет?
Есть какие-нибудь другие варианты без приблизительного времени выведения заставки ?
Rodegast
Код в студию.
Lestoroer
def load_data(self, sp): 
        sh = QProgressBar()
        sh.resize(300,30)
        sh.setWindowFlags(Qt.SplashScreen)
        sh.setStyleSheet('''QProgressBar {
                            border: 2px solid rgb(0,63,120);
                            border-radius: 5px;
                            text-align: center;
                            color: rgb(0,63,120);
                            font: bold 17px "Garamond";
                            }
                            QProgressBar::chunk {
                                background-color: #05B8CC;
                                width: 20px;                          
                            }''')
        sh.show()
        sh.setValue(0)
        for i in range(1,10):
                QApplication.processEvents()
                time.sleep(1)
                sh.setValue(i*10)
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv) 
    splash = QSplashScreen()
    splash.show()
    QApplication.processEvents()
    window = MyWindow() 
    window.load_data(splash) 
    window.show () 
    splash.finish(window) 
    sys.exit(app.exec_()) 
Думаю, вверх кода не нужно, там создается простой Qwidget. Этот код выводит при любом запуске заставку на 10 сек. В не зависимости первый раз или второй запускается программа
Rodegast
Да намутил ты… Похоже что у тебя splash сам по себе и sh сам по себе. И splash нормально останавливается, но с sh непонятно что происходит. Если на заставки надо расположить ProgressBar, то должно быть что-то типа такого:
class Splash(QtGui.QSplashScreen):
	def __init__(self, *arg, **args):
		QtGui.QSplashScreen.__init__(self, *arg, **args)
		self.setCursor(QtCore.Qt.BusyCursor)
		self.setPixmap(QtGui.QPixmap("/home/rodegast/kartinka.jpg"))
  
		loaut = QtGui.QVBoxLayout(self)
		loaut.addItem(QtGui.QSpacerItem(1, 1, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding))
 
		self.progress = QtGui.QProgressBar(self)
		self.progress.setValue(0)
		self.progress.setMaximum(100)
		loaut.addWidget(self.progress)
  
		self.showMessage(u"Пример заставки", QtCore.Qt.AlignTop)
		self.startTimer(1000)
	 
	def timerEvent(self, event):
		self.progress.setValue(self.progress.value() + 1)
		event.accept()
Lestoroer
Rodegast
Да намутил ты… Похоже что у тебя splash сам по себе и sh сам по себе. И splash нормально останавливается, но с sh непонятно что происходит. Если на заставки надо расположить ProgressBar, то должно быть что-то типа такого:
Не очень понял. Вставил код, при длительной загрузке в самом конце вылезает на 1сек и приложение запускается, при запуске приложения второй и последующие разы - появляется и сразу исчезает. Я так понимаю, ты оформление сделал. А у меня процесс не получается.
Вообще не получается у меня сделать эту фишку - как заставка во время загрузки. Хотелось бы так, чтобы во время полной загрузки выводилась картинка, в последующие разы лучше вообще не показывалась, чем быстро мерцала потом исчезала и в итоге раздражала.
Нужно что-то вроде этих двух вариантов:
1)В то время пока происходит загрузка: выводить заставку. (цикл while, допустим)
Этот вариант будет в последующих запусках выводить мерцающее окно. Это его минус.
2) Если библиотеки не загружены виндой: выводить заставку пока происходит загрузка.
Иначе: Заставку вообще не выводить. Тогда получится без мерцаний. И только после перезагрузки компьютера будет выводиться заставка.
Но проблема такая, как узнать время загрузки? Это невозможно заранее узнать. Только после того, как приложение уже загрузилось можно подсчитать время выполнения функции.Надо посмотреть как делают в других языках, может аналогию взять.
Еще пару часов помучаюсь и если не получится забью.
Rodegast
> Вставил код, при длительной загрузке в самом конце вылезает на 1сек и приложение запускается

Покажи куда ты его вставил

> при запуске приложения второй и последующие разы - появляется и сразу исчезает.

Что бы оно не мерцало обычно делают небольшую задержку перед запуском заставки, если программа запустилась за время отведённое на задержку, то заставку не показывают.
Lestoroer
Rodegast
> Покажи куда ты его вставил
Вставил вот это в самое начало кода:
class Splash(QSplashScreen):
    def __init__(self, *arg, **args):
        QSplashScreen.__init__(self, *arg, **args)
        self.setCursor(Qt.BusyCursor)
        self.setPixmap(QPixmap("2.png"))
        loaut = QVBoxLayout(self)
        loaut.addItem(QSpacerItem(1, 1, QSizePolicy.Expanding, QSizePolicy.Expanding))
        self.progress = QProgressBar(self)
        self.progress.setValue(0)
        self.progress.setMaximum(100)
        loaut.addWidget(self.progress)
        self.showMessage(u"Пример заставки", Qt.AlignTop)
        self.startTimer(1000)
    def timerEvent(self, event):
        self.progress.setValue(self.progress.value() + 1)
        event.accept()
И в конце добавил:
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv) 
    splash = Splash()
    splash.show()
    window = MyWindow()
    window.show()
    splash.finish(window)
    sys.exit(app.exec_())  
Rodegast
Ну вроде всё правильно, только таймер из заставки убрать надо (я его поставил что бы показать что ProgressBar работает, если нужна тупая анимация то можно сделать self.progress.setMaximum(0)). Ещё вынеси точку входа в отдельный файл, так будет немного быстрее запускаться.
Lestoroer
Rodegast
Ну вроде всё правильно, только таймер из заставки убрать надо (я его поставил что бы показать что ProgressBar работает, если нужна тупая анимация то можно сделать self.progress.setMaximum(0)). Ещё вынеси точку входа в отдельный файл, так будет немного быстрее запускаться.
Насчет точку входа в отдельный файл по экспериментирую, спасибо. А заставку я все равно убрал. Немного с импортом библиотек повозился, скорость запуска стала секунд 6-9, что в принципе устраивает.
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