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 sys
import time import time
from PySide6.QtCore import QObject, Signal, Slot from PySide6.QtCore import QObject, QThread, Signal
from PySide6.QtWidgets import QApplication, QWidget from PySide6.QtWidgets import QApplication, QWidget
from ui_workerui import Ui_myWidget from ui_workerui import Ui_myWidget
@@ -11,7 +11,7 @@ class Worker1(QObject):
progressed = Signal(str) progressed = Signal(str)
finished = Signal(str) finished = Signal(str)
def run(self): def doWork(self):
value = '0' value = '0'
self.started.emit(value) self.started.emit(value)
for i in range(5): for i in range(5):
@@ -30,13 +30,78 @@ class MyWidget(QWidget, Ui_myWidget):
self.button2.clicked.connect(self.hardWork2) self.button2.clicked.connect(self.hardWork2)
def hardWork1(self): 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): def hardWork2(self):
for i in range(5): self._worker2 = Worker1()
print(i) self._thread2 = QThread()
time.sleep(1)
self.label2.setText('2 terminado') 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__': if __name__ == '__main__':