#!/usr/bin/env python3 import sys import time from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QPushButton, QLabel def redraw(): list.clear() for i in range(1000000): test = QLabel(str(i)) list.addItem(str(i)) def show_time(): clock.setText(time.strftime('%d.%m.%y %H:%M:%S', time.localtime())) app = QApplication(sys.argv) root = QWidget() root.resize(600, 600) list = QListWidget(root) list.resize(600, 500) for i in range(5): list.addItem(str(i)) clock = QLabel(root) clock.move(300, 520) clock.resize(300, 30) show_time() btn = QPushButton('Redraw', root) btn.clicked.connect(redraw) btn.move(300, 570) timer = QTimer() timer.timeout.connect(show_time) timer.start(1000) root.show() sys.exit(app.exec_())
Вопрос: как обновлять QListWidget в отдельном потоке?
p.s. Этого нет в демонстрационном коде, но в реальном приложении (где используется ещё и setItemWidget) при попытке ввести многопоточность происходит следующее:
QObject::setParent: Cannot set parent, new parent is in a different thread
QObject::installEventFilter(): Cannot filter events for objects in a different thread.