我目前正在尝试构建一个 PyQt5 应用程序,它应该由主 GUI 组成,并且在后台应该有一个不同的线程应该在无限循环中测量某些东西。我想使用 QAction 或 Checkbox 来启动和停止这个线程。
所以说当我按下复选框并且状态为真时,线程应该启动,如果我再次单击它应该停止。
现在实现这一点的最佳方法是什么?
目前我正在使用这样的 Worker 线程:
class Worker(QtCore.QObject):
def __init__(self):
super(Worker, self).__init__()
self._isRunning = True
def task(self):
if not self._isRunning:
self._isRunning = True
while self._isRunning:
time.sleep(0.5)
... measure ...
def stop(self):
self._isRunning = False
这在主线程中使其运行:
self.thread = QtCore.QThread()
self.thread.start()
self.worker = Worker()
self.worker.moveToThread(self.thread)
self.btn_start.clicked.connect(self.worker.task)
self.btn_stopped.clicked.connect(lambda: self.worker.stop())
到目前为止,这有效。但我不太相信这是最好的方法,如果我能以所描述的方式使用复选框来做同样的事情,我也会更喜欢它。