【发布时间】:2023-07-19 04:47:01
【问题描述】:
我有一个问题。我正在运行一个 PyQt5 表单,该表单运行一个名为 Task() 的工作程序(我不会详细介绍它的代码,但它基本上只是在 QThread 中返回一个值到 QLabel),如下所示:
class Menu(QMainWindow):
def __init__(self, workers):
super().__init__()
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
lay = QVBoxLayout(self.central_widget)
self.setFixedSize(500, 350)
Pic = QLabel(self)
self.Total = QLabel("Total: <font color='orange'>%s</font>" % (to_check()), alignment=QtCore.Qt.AlignHCenter)
lay.addWidget(self.Total)
thread = QtCore.QThread(self)
thread.start()
self.worker = Task()
self.worker.moveToThread(thread)
self.worker.totalChanged.connect(self.updateTotal)
QtCore.QTimer.singleShot(0, self.worker.dostuff)
thread.finished.connect(self.terminate)
@QtCore.pyqtSlot(int)
def updateTotal(self, total):
self.Total.setText("Total: <font color='orange'>%s</font>" % (total))
def terminate(self):
print("FINISHED")
self.worker.quit()
self.worker.wait()
self.close()
我希望程序在 Task().dostuff() 函数完成后调用 terminate 插槽(并基本上终止线程和函数) - 但我似乎无法让它工作。
我不知道如何通过QTimer.singleshot返回主函数。
【问题讨论】:
标签: python pyqt pyqt5 signals-slots qthread