0

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?

hitech
  • 70
  • 1
  • 8

0 Answers0