Отображение в строке статуса (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_())
