Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для Arbuzik345
3 / 2 / 2
Регистрация: 27.06.2020
Сообщений: 71
PyQt5

Почему виджет не может сразу "разрисоваться" до sleep()?

11.02.2021, 08:12. Показов 1901. Ответов 5

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
from PyQt5 import QtWidgets
from time import sleep
 
if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    mw = QtWidgets.QMainWindow()
    mw.resize(200, 200)
 
    mw.setStyleSheet('background-color: lime;')
    mw.show()
    sleep(3)
 
    app.exec()
Виджет появляется, но он пустой, ждет пока завершится sleep. Становится лаймовым после sleep. Почему так происходит? Ведь show работает первее. И скажите, пожалуйста, как мне сделать так, чтобы виджет сразу разрисовался, а затем играла функция sleep?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2021, 08:12
Ответы с готовыми решениями:

Получить время когда компьютер может идти в sleep
PowrProf.INSTANCE.CallNtPowerInformation(PowrProf.POWER_INFORMATION_LEVEL.SystemPowerInformation, null, 0, mem, (int)...

Почему Object.sleep() должен быть обязательно в synchronized?
synchronized (Thread.currentThread()){ try { Thread.currentThread().wait(); } catch...

Почему Image2 показывается после sleep(3000); а не перед?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg,...

5
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.02.2021, 08:57
Простая логика:

1) Создается приложение.
2) Создается главное окно.
3) Рисуется согласно заданным свойствами.
3) Главному окну задаются новые свойства.
4) Программа засыпает.
5) ----> Пункт 3.
0
 Аватар для Arbuzik345
3 / 2 / 2
Регистрация: 27.06.2020
Сообщений: 71
11.02.2021, 09:45  [ТС]
DmFat, ну так как сделать чтобы виджет разрисовался до sleep?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.02.2021, 11:24
Arbuzik345, не использовать sleep. В чем вообще смысл сие действа?
0
 Аватар для Arbuzik345
3 / 2 / 2
Регистрация: 27.06.2020
Сообщений: 71
11.02.2021, 11:49  [ТС]
Лучший ответ Сообщение было отмечено DmFat как решение

Решение

DmFat, это упрощенный код для вопроса. Вообще для моей программы нужно использовать urllib.request.urlopen(url), с которым одновременно должен выходить сразу рисованный виджет, где будет написано "пожалуйста ожидайте" и я заметил, что если сделать такой код со sleep, как в этом вопросе, то в принципе смысл тот же. urllib.request.urlopen тоже останавливает код и виджет загружается уже тогда когда не нужно. Точно нету никаких лазеек?

Добавлено через 15 минут
Ответ: юзать потоки
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
from PyQt5 import QtWidgets
from time import sleep
 
from threading import Thread
 
if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    mw = QtWidgets.QMainWindow()
    mw.resize(200, 200)
 
    mw.setStyleSheet('background-color: lime;')
    mw.show()
 
    def foo():
        sleep(3)
        print('ready')
 
    Thread(target = foo).start()
 
    app.exec()
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
11.02.2021, 13:01
Arbuzik345, нужно уметь правильно поставить вопрос, чтоб избежать глупых ответов:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys
from PySide2 import QtWidgets, QtCore
 
 
class Worker(QtCore.QThread):
 
    def run(self):
        self.sleep(3)
 
 
class MainWindow(QtWidgets.QWidget):
    def __init__(self, parent: QtWidgets.QWidget = None):
        QtWidgets.QWidget.__init__(self, parent)
 
        self.label = QtWidgets.QLabel("Поток остановлен", self)
        self.start = QtWidgets.QPushButton("Запустить", self)
        self.worker = Worker(self)
 
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.label)
        layout.addWidget(self.start)
 
        self.worker.started.connect(lambda: self.start.setDisabled(True))
        self.worker.started.connect(lambda: self.label.setText("Поток запущен"))
        self.worker.finished.connect(lambda: self.start.setEnabled(True))
        self.worker.finished.connect(lambda: self.label.setText("Поток остановлен"))
 
        self.start.clicked.connect(self.worker.start)
 
        if not parent:
            self.show()
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    sys.exit(app.exec_())
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2021, 13:01
Помогаю со студенческими работами здесь

Почему двоится виджет?
Установила на сайт виджет вконтакте. Но он почему то двоиться у некоторых пользователей, а др все норм! Ни кто не знает почему так...

Почему не работает виджет
Здравствуйте, я только начал осваивать QT и не могу понять почему, у меня не высвечивается кнопка которую я создал. Пытался сам , что-то...

Threed.Sleep(1) равен 16ms, почему и как сделать меньше ?
Читал что это связано с квантом времени win, повышение приоритета не помогает, но даже пытаясь сделать циклом Int b =...

Почему кастомный виджет не добавляется в layout?
from PyQt5.QtWidgets import QWidget, QFormLayout, QLineEdit, QTextEdit, QComboBox, QDateTimeEdit from abc import ABCMeta, abstractmethod ...

Почему юзер может залогиниться в OEM Manager и не может в SQL*Plus Worksheet?
Почему созданный мной юзер может залогиниться в OEM Manager и не может в SQL*Plus Worksheet? При попытке залогиниться в SQL*Plus...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru