Форум сайта python.su
Первый запуск идет секунд 12 , ставлю приблизительное время выведения заставки 8 секунд, но второй запуск длиться порядка 0,1сек (библиотеки висят в процессах винды и прогрузились), но при этом заставка также выводится 8секунд. Как сделать так, чтобы программа понимала когда надо показывать заставку, а когда нет?
Есть какие-нибудь другие варианты без приблизительного времени выведения заставки ?
Отредактировано Lestoroer (Июнь 28, 2016 19:01:26)
Офлайн
Код в студию.
Офлайн
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_())
Отредактировано Lestoroer (Июнь 28, 2016 20:39:22)
Офлайн
Да намутил ты… Похоже что у тебя 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()
Отредактировано Rodegast (Июнь 28, 2016 22:30:17)
Офлайн
RodegastНе очень понял. Вставил код, при длительной загрузке в самом конце вылезает на 1сек и приложение запускается, при запуске приложения второй и последующие разы - появляется и сразу исчезает. Я так понимаю, ты оформление сделал. А у меня процесс не получается.
Да намутил ты… Похоже что у тебя splash сам по себе и sh сам по себе. И splash нормально останавливается, но с sh непонятно что происходит. Если на заставки надо расположить ProgressBar, то должно быть что-то типа такого:
Отредактировано Lestoroer (Июнь 29, 2016 10:21:47)
Офлайн
> Вставил код, при длительной загрузке в самом конце вылезает на 1сек и приложение запускается
Покажи куда ты его вставил
> при запуске приложения второй и последующие разы - появляется и сразу исчезает.
Что бы оно не мерцало обычно делают небольшую задержку перед запуском заставки, если программа запустилась за время отведённое на задержку, то заставку не показывают.
Офлайн
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_())
Отредактировано Lestoroer (Июнь 29, 2016 11:21:51)
Офлайн
Ну вроде всё правильно, только таймер из заставки убрать надо (я его поставил что бы показать что ProgressBar работает, если нужна тупая анимация то можно сделать self.progress.setMaximum(0)). Ещё вынеси точку входа в отдельный файл, так будет немного быстрее запускаться.
Офлайн
RodegastНасчет точку входа в отдельный файл по экспериментирую, спасибо. А заставку я все равно убрал. Немного с импортом библиотек повозился, скорость запуска стала секунд 6-9, что в принципе устраивает.
Ну вроде всё правильно, только таймер из заставки убрать надо (я его поставил что бы показать что ProgressBar работает, если нужна тупая анимация то можно сделать self.progress.setMaximum(0)). Ещё вынеси точку входа в отдельный файл, так будет немного быстрее запускаться.
Офлайн