I want to create a csv file progress bar when I click a button. I know it is possible to do this with QThread but I don't know how.
class Converter(QtWidgets.QWidget, Ui_Convertisseur):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setupConnetions()
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(100)
self.progressBar.setValue(0)
# Code added
self.thread = QtCore.QThread()
self.thread.start()
self.worker = Worker()
self.worker.moveToThread(self.thread)
self.worker.progressChanged.connect(self.progressBar.setValue)
self.pushButton.clicked.connect(self.worker.work)
# The function in which I generate csv file
def convert(self):
df_liste.to_csv(file.csv)
class Worker(QtCore.QThread):
progressChanged = QtCore.Signal(int)
def work(self):
progressbar_value = 0
while progressbar_value < 100:
self.progressChanged.emit(progressbar_value)
time.sleep(0.1)
ANOTHER CODE. It works but the window freezes a few secondes before the progressbar starts to display the progression
self.pushButton.clicked.connect(self.onButtonClick)
def onButtonClick(self):
df_liste.to_csv(file.csv)
self.calc = External()
self.calc.countChanged.connect(self.onCountChanged)
self.calc.start()
def onCountChanged(self, value):
self.progressBar.setValue(value)
class External(QtCore.QThread):
countChanged = QtCore.Signal(int)
def run(self):
count = 0
while count < 100:
count +=1
time.sleep(1)
self.countChanged.emit(count)
Do you know why?