QObject e QThread: movendo "workers" para threads separadas

This commit is contained in:
Luiz Otávio
2023-03-11 11:02:49 -03:00
parent d81f98ce29
commit d0c9e3c013

View File

@@ -1,7 +1,7 @@
import sys
import time
from PySide6.QtCore import QObject, Signal, Slot
from PySide6.QtCore import QObject, QThread, Signal
from PySide6.QtWidgets import QApplication, QWidget
from ui_workerui import Ui_myWidget
@@ -11,7 +11,7 @@ class Worker1(QObject):
progressed = Signal(str)
finished = Signal(str)
def run(self):
def doWork(self):
value = '0'
self.started.emit(value)
for i in range(5):
@@ -30,13 +30,78 @@ class MyWidget(QWidget, Ui_myWidget):
self.button2.clicked.connect(self.hardWork2)
def hardWork1(self):
self.label1.setText('1 terminado')
self._worker = Worker1()
self._thread = QThread()
worker = self._worker
thread = self._thread
# Mover o worker para a thread
worker.moveToThread(thread)
# Run
thread.started.connect(worker.doWork)
worker.finished.connect(thread.quit)
thread.finished.connect(thread.deleteLater)
worker.finished.connect(worker.deleteLater)
worker.started.connect(self.worker1Started)
worker.progressed.connect(self.worker1Progressed)
worker.finished.connect(self.worker1Finished)
thread.start()
def worker1Started(self, value):
self.button1.setDisabled(True)
self.label1.setText(value)
print('worker iniciado')
def worker1Progressed(self, value):
self.label1.setText(value)
print('em progresso')
def worker1Finished(self, value):
self.label1.setText(value)
self.button1.setDisabled(False)
print('worker finalizado')
def hardWork2(self):
for i in range(5):
print(i)
time.sleep(1)
self.label2.setText('2 terminado')
self._worker2 = Worker1()
self._thread2 = QThread()
worker = self._worker2
thread = self._thread2
# Mover o worker para a thread
worker.moveToThread(thread)
# Run
thread.started.connect(worker.doWork)
worker.finished.connect(thread.quit)
thread.finished.connect(thread.deleteLater)
worker.finished.connect(worker.deleteLater)
worker.started.connect(self.worker2Started)
worker.progressed.connect(self.worker2Progressed)
worker.finished.connect(self.worker2Finished)
thread.start()
def worker2Started(self, value):
self.button2.setDisabled(True)
self.label2.setText(value)
print('worker 2 iniciado')
def worker2Progressed(self, value):
self.label2.setText(value)
print('2 em progresso')
def worker2Finished(self, value):
self.label2.setText(value)
self.button2.setDisabled(False)
print('2 worker finalizado')
if __name__ == '__main__':