This is a simplified code from one of my projects, I'm trying to update one progressbar from inside main thread and another from a worker thread. In actual project, main progress bar represents directory being scanned, and worker thread extracts data from certain files and saves to database.
I can not seem to figure out a way that these two progressbars function independent of each other. Worker progressbar only starts mving when main has reached 100%
import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QProgressBarfrom PyQt5.QtCore import QObject, pyqtSignal, QThread, QTimerimport timeclass Worker(QObject): progressChanged = pyqtSignal(int) def __init__(self): super().__init__() def repeat_process_decoded_instances(self): counter = 0 total_counts = 100 while counter < total_counts: counter += 0.5 percentage = round(counter / total_counts * 100) self.progressChanged.emit(percentage) time.sleep(0.1)class MyWindow(QWidget): def __init__(self): super().__init__() self.worker = Worker() self.initUI() def initUI(self): layout = QVBoxLayout() self.progress_label1 = QLabel("Main Thread Progress:") self.progress_bar1 = QProgressBar() layout.addWidget(self.progress_label1) layout.addWidget(self.progress_bar1) self.progress_label2 = QLabel("Worker Thread Progress:") self.progress_bar2 = QProgressBar() layout.addWidget(self.progress_label2) layout.addWidget(self.progress_bar2) self.setLayout(layout) self.setWindowTitle("Dual Progress Bars App") self.show() self.worker.progressChanged.connect(self.updateProgressBar2) self.worker_thread = QThread() self.worker.moveToThread(self.worker_thread) self.worker_thread.start() QTimer.singleShot(0, self.worker.repeat_process_decoded_instances) def updateProgressBar2(self, percentage): self.progress_bar2.setValue(int(percentage))def main(): app = QApplication(sys.argv) window = MyWindow() count = 0 total_counts = 100 while count < total_counts: count += 2 percentage = round(count / total_counts * 100) window.progress_bar1.setValue(percentage) time.sleep(0.1) sys.exit(app.exec_())if __name__ == "__main__": main()