1
我目前正在嘗試構建一個PyQt5應用程序,它應該由主GUI和背景中應該有一個不同的線程,應該測量無限循環中的某些東西。我想用QAction或複選框來啓動和停止這個線程。啓動和停止線程使用QAction切換
所以說,當我按下複選框,狀態爲真時,線程應該啓動,如果再次單擊它應該停止。
現在最好的實現方式是什麼?
目前我使用一個工作線程是這樣的:
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())
到目前爲止,這個工程。但我並不確定這是做這件事的最好方式,如果我能按照上述方式使用複選框做同樣的事情,我也會更加喜歡它。
非常感謝您!你有什麼特別的原因叫你在任務方法中停止?不管怎麼樣,爲了達到這一點,不應該停止假?另外我還需要做些什麼來使工作線程在GUI線程中更改標籤而不會造成混亂? – haxor789
@ haxor789。你說'stop()'是正確的 - 它只是早期版本遺留下來的東西。我已經更新了演示,包括更改標籤。 – ekhumoro