我想使用线程方法从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,并且我无法单击任何按钮等。
或者,如何使它起作用?谢谢
说明:
根据您的逻辑,您正在调用“ 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)
# ...