Arka plan işlemleri sırasında meşgul göstergesi oluşturma

Lutfen calisan kod atmaya ozen gosterin.

Dedigim gibi, ana thread’de yapilan islemleri yeni thread’e almak lazim:

### import'lar ###

class MainWindow(QMainWindow):
    createProgressSignal = pyqtSignal()
    finishProgressSignal = pyqtSignal()
    
    def __init__(self):
        super().__init__()

        self.setWindowTitle("My App")
        self.setFixedSize(300,100)

        layout = QVBoxLayout()
        
        button= QPushButton("do some works")

        layout.addWidget(button)

        button.clicked.connect(self.doSomethingWorks)

        self.createProgressSignal.connect(self.createProgress)
        self.finishProgressSignal.connect(self.finishProgress)
      
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

    def doSomethingWorks(self):
        # işlem öncesinde qprogressdialog çağırma simyali yay
        self.createProgressSignal.emit()
        threading.Thread(target=self.threadMain, args=(self.finishProgressSignal,)).start()

    def threadMain(self, finishSignal):
        # Yapılacak bir işlemi simüle eden döngü. 
        # Main thread bu şekilde bir işlem yaparken QProgressDialog çağırılır 
        for i in range(20):
            print(i)
            time.sleep(0.5)
        print("işlem bitti")

        # işlem sonrasında qprogressdialog sonlandırma sinayali yay
        finishSignal.emit()

    def createProgress(self):# progress dialog oluşturme ve çalıştırma slotu
        self.progress =  ProgressDialog("İşlem Ekrani","İşlem Yapılıyor...",0,0,self) # Progress dialog tanımlama
        
        # event loop gerekiyor. Bu haliyle boş pencere döndürüyor. 


    def finishProgress(self): # progress dialog kapatma slotu
        self.progress.close()

class ProgressDialog(QProgressDialog):
    def __init__(self,win_label,text,min,max=0,parent=None):
        super(ProgressDialog,self).__init__(parent)

        self.setWindowTitle(win_label)
        self.setLabelText(text)
        self.setFixedSize(400,100)

        self.setRange(min,max)
        self.setCancelButton(None)

        self.setWindowModality(Qt.WindowModal)

        self.show()



app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
2 Beğeni