From d0c9e3c0135ed83bf04346524e703757deef5e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luiz=20Ot=C3=A1vio?= Date: Sat, 11 Mar 2023 11:02:49 -0300 Subject: [PATCH] QObject e QThread: movendo "workers" para threads separadas --- aula204/main.py | 79 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 7 deletions(-) diff --git a/aula204/main.py b/aula204/main.py index 71fb91d..bee86f4 100644 --- a/aula204/main.py +++ b/aula204/main.py @@ -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__':