Apr-25-2024, 09:30 PM
(This post was last modified: Apr-25-2024, 09:30 PM by rcwildabeast.)
I am relatively new to PYQT5. I am implementing a progress bar. However, I have run into the issue where the pop up progress bar does not run at the same time as when the function is called. In the example, I am using I want the progress bar to pop up and display progress while the self.main_window_button is clicked and executes a function under another file called untitled3.
import sys
import time
import untitled3
from PyQt5.uic import loadUi
from PyQt5 import QtWidgets,QtGui
from PyQt5.QtWidgets import QDialog, QApplication,QMainWindow, QWidget, QHBoxLayout, QProgressBar,QVBoxLayout
from PyQt5.QtCore import QThread, pyqtSignal, QObject, pyqtSlot
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
loadUi("app_interface.ui",self)
self.pushButton.clicked.connect(self.gotoScreen2)
def gotoScreen2(self):
screen2=Screen2()
widget.addWidget(screen2)
widget.setCurrentWidget(screen2)
class Screen2(QDialog):
def __init__(self):
super(Screen2,self).__init__()
loadUi("GL_Dump_Curr.ui",self)
self.h_box = QHBoxLayout(self)
self.popup = PopUpProgressB()
self.main_window_button=self.pushButton
self.main_window_button.clicked.connect(self.popup.start_progress)
self.h_box.addWidget(self.main_window_button)
self.setLayout(self.h_box)
self.show()
self.pushButton.clicked.connect(untitled3.gl_dump)
#self.h_box.processEvents()
self.pushButton_2.clicked.connect(self.gotoScreen1)
def gotoScreen1(self):
mainwindow=MainWindow()
widget.addWidget(mainwindow)
widget.setCurrentWidget(mainwindow)
class Worker(QObject):
finished = pyqtSignal()
intReady = pyqtSignal(int)
@pyqtSlot()
def proc_counter(self): # A slot takes no params
for i in range(1, 100):
time.sleep(0.01)
self.intReady.emit(i)
self.finished.emit()
class PopUpProgressB(QWidget):
def __init__(self):
super().__init__()
self.pbar = QProgressBar(self)
self.pbar.setGeometry(30, 40, 500, 75)
self.layout = QVBoxLayout()
self.layout.addWidget(self.pbar)
self.setLayout(self.layout)
self.setGeometry(300, 300, 550, 100)
self.setWindowTitle('Progress Bar')
# self.show()
self.obj = Worker()
self.thread = QThread()
self.obj.intReady.connect(self.on_count_changed)
self.obj.moveToThread(self.thread)
self.obj.finished.connect(self.thread.quit)
self.obj.finished.connect(self.hide) # To hide the progress bar after the progress is completed
self.thread.started.connect(self.obj.proc_counter)
# self.thread.start() # This was moved to start_progress
def start_progress(self):
# To restart the progress every time
self.show()
self.thread.start()
def on_count_changed(self, value):
self.pbar.setValue(value)
app = QApplication(sys.argv)
widget=QtWidgets.QStackedWidget()
mainwindow=MainWindow()
widget.addWidget(mainwindow)
widget.setFixedHeight(300)
widget.setFixedHeight(400)
widget.show()
try:
sys.exit(app.exec_())
except:
print("Exiting")
