From 2e7376443e6c5b16c49f0933da3a096f5cb4b439 Mon Sep 17 00:00:00 2001
From: unknown <asoalexandros@gmail.com>
Date: Fri, 16 May 2025 15:44:55 +0200
Subject: [PATCH] QThreads Work

---
 hp4194/cv_qt_inteface.py | 55 ++++++++++++++++++----------------------
 1 file changed, 24 insertions(+), 31 deletions(-)

diff --git a/hp4194/cv_qt_inteface.py b/hp4194/cv_qt_inteface.py
index 81758a5..7cdd6fe 100644
--- a/hp4194/cv_qt_inteface.py
+++ b/hp4194/cv_qt_inteface.py
@@ -8,6 +8,7 @@ from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
 from matplotlib.figure import Figure
 import random
 from PyQt6.QtGui import QAction
+from PyQt6.QtCore import *
 import time
 
 class MplCanvas(FigureCanvasQTAgg):
@@ -16,24 +17,30 @@ class MplCanvas(FigureCanvasQTAgg):
         self.axes = fig.subplots(nrows=2,ncols=3)
         super().__init__(fig)
 
-class Worker(Qobject):
-    finished = pyqtSignal()
-    progress = pyqtSignal(int)
+class Worker(QRunnable):
+    def __init__(self, window):
+        super().__init__()
+        self.window = window
+
 
-    def run():
+    @pyqtSlot()
+    def run(self):
+        self.window.widget.setEnabled(False)
+        self.window.toolbar.setEnabled(False)
         for i in range(20):
-            self.xdata = list(range(20))
+            self.window.xdata = list(range(20))
             for i in range(2):
                 for j in range(3):
-                    self.sc.axes[i,j].cla()  # Clear the canvas.
-                    self.sc.axes[i,j].plot(self.xdata,random.sample(range(50),20))  
+                    self.window.sc.axes[i,j].cla()  # Clear the canvas.
+                    self.window.sc.axes[i,j].plot(self.window.xdata,random.sample(range(50),20))  
 
             # Trigger the canvas to update and redraw.
-            self.sc.draw_idle()
+            self.window.sc.draw_idle()
             time.sleep(1)
+        self.window.widget.setEnabled(True)
+        self.window.toolbar.setEnabled(True)
+        self.data = 1
 
-            print("finished")
-      
 
 
 class MainWinow(QMainWindow):
@@ -233,28 +240,14 @@ class MainWinow(QMainWindow):
         self.setCentralWidget(self.widget)
         self.showMaximized()
 
-    def toolbar_button_clicked(self):
-        self.widget.setEnabled(False)
-        self.toolbar.setEnabled(False)
-        
-        # Step 2: Create a QThread object
-        self.thread = QThread()
-        # Step 3: Create a worker object
-        self.worker = Worker()
-        # Step 4: Move worker to the thread
-        self.worker.moveToThread(self.thread)
-        # Step 5: Connect signals and slots
-        self.thread.started.connect(self.worker.run)
-        self.worker.finished.connect(self.thread.quit)
-        self.worker.finished.connect(self.worker.deleteLater)
-        self.thread.finished.connect(self.thread.deleteLater)
-        self.worker.progress.connect(self.reportProgress)
-        # Step 6: Start the thread
-        self.thread.start()
+        self.threadpool = QThreadPool()
+        print("Multithreading with maximum %d threads" % self.threadpool.maxThreadCount())
 
-        
-        self.widget.setEnabled(True)
-        self.toolbar.setEnabled(True)
+    def toolbar_button_clicked(self):    
+        self.worker = Worker(self)
+        self.threadpool.start(self.worker)
+
+    
         
 
 app= QApplication(sys.argv)
-- 
GitLab