[pyqt使用线程更新进度条

问题描述 投票:0回答:1

我想使用线程方法从main.py更新进度条。

if __name__ == "__main__":

       app = QApplication(sys.argv)
       uiplot = gui.Ui_MainWindow()

       Update_Progressbar_thread = QThread() 
       Update_Progressbar_thread.started.connect(Update_Progressbar)


       def Update_Progressbar():
              progressbar_value = progressbar_value + 1
              while (progressbar_value < 100):
                     uiplot.PSprogressbar.setValue(progressbar_value)
                     time.sleep(0.1)
      uiplot.PSStart_btn.clicked.connect(Update_Progressbar_thread.start) 

问题是此方法阻塞了我的GUI,并且我无法单击任何按钮等。

或者,如何使它起作用?谢谢

python user-interface pyqt pyqt5
1个回答
1
投票

说明:

根据您的逻辑,您正在调用“ Update_Progressbar”以在QThread启动时运行,但是“ Update_Progressbar”将在哪里运行?好吧,在阻止GUI的主线程中。

解决方案:

您的目标不是在QThread启动时运行“ Update_Progressbar”,而是在处理QThread的线程中运行。因此,在这种情况下,您可以创建一个驻留在QThread处理的线程中的Worker。

class Worker(QObject):
    progressChanged = pyqtSignal(int)

    def work(self):
        progressbar_value = 0
        while progressbar_value < 100:
            self.progressChanged.emit(progressbar_value)
            time.sleep(0.1)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    uiplot = gui.Ui_MainWindow()

    thread = QThread()
    thread.start()

    worker = Worker()
    worker.moveToThread(thread)
    worker.progressChanged.connect(uiplot.PSprogressbar.setValue)
    uiplot.PSStart_btn.clicked.connect(worker.work)

    # ...
© www.soinside.com 2019 - 2024. All rights reserved.