Progress Bar Kullanımı

Tanımlamış olduğum BistIstanbul class ında tarama fonksiyonum var. 513 hisseyi tarıyor.

Pyqt5 ile tasarlamış olduğum anasayfaya bu classı çağırarak tarama fonksiyonunu çalıştırıyorum. Fakat anasayfadaki progressBarın da görsel olarak 513 hisseyi tararken artmasını istiyorum. tarama fonksiyonu bitene kadar progressBarı çalıştıramıyorum haliyle. Nasıl yapacağız bunu?

Aşağıdaki örnek yardımcı olacaktır.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QPushButton
from PyQt5.QtCore import Qt, QTimer

class ProgressBarExample(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.progressBar = QProgressBar(self)
        self.progressBar.setGeometry(30, 40, 200, 25)

        self.startButton = QPushButton('Baslat', self)
        self.startButton.clicked.connect(self.startProgressBar)

        self.stopButton = QPushButton('Durdur', self)
        self.stopButton.clicked.connect(self.stopProgressBar)

        vbox = QVBoxLayout()
        vbox.addWidget(self.progressBar)
        vbox.addWidget(self.startButton)
        vbox.addWidget(self.stopButton)

        self.setLayout(vbox)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.updateProgressBar)

        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('forum.yazbel.com')
        self.show()

    def startProgressBar(self):
        self.progressBar.setValue(0)
        self.timer.start(100)  # Her 100 milisaniyede bir timeout sinyali goonder

    def stopProgressBar(self):
        self.timer.stop()

    def updateProgressBar(self):
        value = self.progressBar.value()
        if value < 100:
            value += 1
            self.progressBar.setValue(value)
        else:
            self.timer.stop()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ProgressBarExample()
    sys.exit(app.exec_())

Bunlari biliyorum teşekkürler. Anlatamadım herhalde başka bir classdaki fonksiyonu çağırıyorum. Fonksiyon tarama işlemi yapıyor yaklaşık 3 dk falan. Bu işlem devam ederken anasayfadaki progress barda işlemin yüzde kaçı tamamlanmış onu görmek istiyorum. Aslinda fonksiyonu anasayfadaki class a yazsam problem yok. Bir de butona basınca işlem bitene kadar bekleme yapıyor., thread mi kullanmalıyım?

Evet thread kullanarak bu işi yapabilirsiniz.
Örnek kod:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar
from PyQt5.QtCore import QThread, pyqtSignal
from time import sleep


class Work(QThread):
    progress_signal = pyqtSignal(int)
    
    def __init__(self):
        super().__init__()

    def run(self):
        #bura run diye kalmalı
        for i in range(0, 101):
            self.progress_signal.emit(i)
            sleep(0.4)


class Window(QWidget):

    def __init__(self):
        super().__init__()
        self.ekran()

    def ekran(self):
        self.progress_bar = QProgressBar(self)

        self.w = Work()
        self.w.progress_signal.connect(self.p_update)
        self.w.start()

    def p_update(self, x):
        self.progress_bar.setValue(x)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())