【发布时间】:2022-01-04 12:26:03
【问题描述】:
我正在编写处理图像并从串行端口发送图像颜色并显示结果的 python gui 应用程序,但不幸的是我的 gui 冻结了。我尝试使用 QApllication.processEvents,它可以工作,但我的程序速度很慢,速度对我来说非常重要,每一秒一次迭代应该完成然后我使用 QThread,我的应用程序仍然冻结。这是我的代码:
class Worker(QObject):
progress = pyqtSignal(int)
gui_update = pyqtSignal()
def __init__(self, knot, lay, baft):
super().__init__()
self.knot = knot
self.lay = lay
self.baft = baft
def run(self):
while self.knot <= knotter_width:
color_to_send = []
for i in range(1, number_of_knotter + 1):
color_to_send.append(self.baft["knotters"][i][self.lay][self.knot])
self.progress.emit(self.knot)
self.gui_update.emit() # for updating gui but not work
QThread 设置:
self.thrd = QThread()
self.worker = Worker(self.knot, self.lay, self.baft)
self.worker.moveToThread(self.thrd)
self.thrd.started.connect(self.worker.run)
self.worker.progress.connect(self.progress)
self.worker.gui_update.connect(self.knotters_status)
self.worker.finish.connect(self.finished)
self.worker.ex.connect(self.thrd.quit)
self.worker.ex.connect(self.worker.deleteLater)
self.thrd.finished.connect(self.thrd.deleteLater)
self.thrd.start()
【问题讨论】:
-
请编辑您的问题以提供可用于重现问题的minimal reproducible example。
-
@G.M.我编辑了。
-
仍然提供的代码是开放式的。许多变量仍然不合理,例如 self.worker.ex 还有一件事,有时当我过多地轰炸事件时,我遇到了 Qthread 问题和冻结。作为补救措施,我将我的数据收集在一个列表中,并且仅在达到一定数量时才发出。然后在进程结束时,我发出了剩余的列表
-
我在其他帖子中回答了问题stackoverflow.com/a/70624220/14985100
标签: python qt pyqt pyqt5 qthread