Отображение в строке статуса (statusBar) нового значения после каждой итерации (python)

Как отображать в строке statusBar новое значение после каждой итерации? К сожалению, значение отображается только после прохождения цикла полностью.

class my_window(QtWidgets.QMainWindow, Ui_MainWindow):
    ...
    module.get_products(self)

    def view_message_statusbar(self, message):
        self.statusBar.showMessage(str(message))


def get_products(window):
    while условие:
        products = get_response(api)
        window.view_message_statusbar(products)

Ответы (1 шт):

Автор решения: S. Nick

Вы привели отрывок кода, по которому не видна структура вашего приложения.

Как вариант, это может выглядеть примерно так:

import sys
import urllib.request
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QVBoxLayout,
    QMainWindow, QStatusBar)


class CrawlThread(QThread):
    status_signal = pyqtSignal(str)

    def __init__(self):
        super(CrawlThread, self).__init__()

    def run(self):
        self.status_signal.emit('Выполняется запрос (request.urlopen(...))')
        self.msleep(2000)    # это надо убрать, пауза 2 сек.
        response = urllib.request.urlopen('https://ru.stackoverflow.com/questions/1180145/python-%d0%9e%d1%82%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b5-%d1%81%d1%82%d0%b0%d1%82%d1%83%d1%81%d0%b0-%d0%bd%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d0%ba%d0%b0%d0%b6%d0%b4%d0%be%d0%b9-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b8#1180145') #('https://www.python.org')
        self.status_signal.emit('Сохраняем в my_file.html !')
        self.msleep(2000)    # это надо убрать, пауза 2 сек.
        with open('my_file.html', 'w') as f:                          
            f.write(response.read().decode('utf-8'))
        self.status_signal.emit('Готово. Можете запускать my_file.html')
        

class Demo(QMainWindow):
    def __init__(self):
        super(Demo, self).__init__()
        
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        self.statusBar().showMessage("Hello World")
        
        self.button = QPushButton('Start', self)
        self.button.clicked.connect(self.start_func)
        self.label = QLabel('Ready to do', self)
        self.label.setAlignment(Qt.AlignCenter)

        self.crawl_thread = CrawlThread()
        self.crawl_thread.status_signal.connect(self.status_func)

        self.v_layout = QVBoxLayout(self.centralWidget)
        self.v_layout.addWidget(self.label)
        self.v_layout.addWidget(self.button)

    def start_func(self):
        self.crawl_thread.start()

    def status_func(self, status):
        self.label.setText(status)

        self.statusBar().showMessage(status)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.resize(400, 300)
    demo.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка