Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2025, 00:34   #1
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию Окно заставки вылетает

Приветствую Друзья!!!
И снова обращаюсь к Вам за помощью. Так как опять запутался по хождению нашей всемирной сети...... Суть проблемы в следующем... Я изучаю "Оконные приложения Python 3 и PyQt6", автор Прохорёнок Н.А. и Дронов В.А. Пройдя три главы а именно:
Глава 18.9. - Вывод заставки
Глава 19.5. - Разворачивание и сворачивание окон
Глава 19.6. - Управление прозрачностью окна

Я решил соединить листинги из этих глав....

Код:
from PyQt6 import QtCore, QtWidgets, QtGui
import time
class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.btnMin = QtWidgets.QPushButton("Свернуть")
        self.btnMax = QtWidgets.QPushButton("Развернуть")
        self.btnFull = QtWidgets.QPushButton("Полный экран")
        self.btnNormal = QtWidgets.QPushButton("Нормальный размер")
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.btnMin)
        vbox.addWidget(self.btnMax)
        vbox.addWidget(self.btnFull)
        vbox.addWidget(self.btnNormal)
        self.setLayout(vbox)
        self.btnMin.clicked.connect(self.on_min)
        self.btnMax.clicked.connect(self.on_max)
        self.btnFull.clicked.connect(self.on_full)
        self.btnNormal.clicked.connect(self.on_normal)
    def on_min(self):
        self.showMinimized()
    def on_max(self):
        self.showMaximized()
    def on_full(self):
        self.showFullScreen()
    def on_normal(self):
        self.showNormal()
    def load_data(self, ap):
        for i in range(1, 20): # Имитируем процесс
            time.sleep(20000) # Что-то загружаем
            ap.showMessage("Загрузка данных...(0%)".format(i*10),
                           QtCore.Qt.AlignmentFlag.AlignHCenter|
                           QtCore.Qt.AlignmentFlag.AlignBottom,
                           QtCore.Qt.GlobalColor.red)
            # Принудительно обрабатываем события
            QtWidgets.QApplication.instance().processEvents()
if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle("Разворачивание и сворачивание окон")
    window.resize(300, 100)
    splash = QtWidgets.QSplashScreen(QtGui.QPixmap("screen2.jpg"))
    splash.showMessage("Загрузка данных... (0)%",
                       QtCore.Qt.AlignmentFlag.AlignHCenter |
                       QtCore.Qt.AlignmentFlag.AlignBottom,
                       QtGui.QColor("red"))
    splash.show()
    QtWidgets.QApplication.instance().processEvents()
    window.show()
    splash.finish(window)
    sys.exit(app.exec())
Все получилось кроме заставки..... окно появляется и тут же исчезает (также высылаю Вам саму программу)
PythonProject5.rar
Помогите пожалуйста разобраться ....
Заранее благодарю
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Старый 10.01.2025, 05:11   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Перед window.show() нужно вызвать window.load_data(splash), который и имитирует долгую загрузку. Еще нужно поправить кое-что в load_data:
Код:
    def load_data(self, ap):
        for i in range(1, 11): # верхняя граница не 20, а 11, чтобы получилось 100% в конце
            time.sleep(2) # тут время сна в секундах указывается, так что 5.5 часов на каждый "тик" это слишком
            ap.showMessage("Загрузка данных...{0}%".format(i*10), # тут нужны фигурные скобки, чтобы format "знал" куда подставить данные
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.01.2025, 09:36   #3
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

Спасибо большое.
Можно по подробнее с фигурными скобками, дело в том что у меня выходит ошибка
Код:
Traceback (most recent call last):
  File "C:\Users\mikki\PycharmProjects\PythonProject5\min_and_max_window.py", line 50, in <module>
    window.load_data(splash)
    ~~~~~~~~~~~~~~~~^^^^^^^^
  File "C:\Users\mikki\PycharmProjects\PythonProject5\min_and_max_window.py", line 31, in load_data
    ap.showMessage("Загрузка данных...{0%}".format(i*10),
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
KeyError: '0%'

Process finished with exit code 1
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Старый 11.01.2025, 09:42   #4
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

простите последний вопрос снимается это я не правильно поставил скобки
Огромное спасибо за вашу помощь
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Задача на типизированные файлы. При работе часто вылетает окно 'CPU'. В чем проблема? neytron007 Помощь студентам 2 03.01.2013 19:25
Чужое окно вылетает evgenrpo Win Api 0 16.03.2012 00:40
Экранные заставки Mels Помощь студентам 0 09.03.2012 23:05
Создание заставки Soko123 Помощь студентам 1 08.12.2010 15:05