前言
- 实现技术: QThread计算线程+pyqtSignal+主线程更新进度(线程信号与主线程的槽函数绑定)
- 若不采用QThread创建一个单独的线程执行运算,进度条(窗口)在计算过程中会出现卡顿。直到计算完成,进度100%时才更新窗口的进度。
Demo代码
from PyQt5.QtWidgets import QWidget, QApplication, QProgressBar
from PyQt5.QtCore import QThread, pyqtSignal
import sys
import time
class CalculatorThread(QThread):
signal_progress_update = pyqtSignal(list)
def __init__(self):
super(CalculatorThread, self).__init__()
self.total = 100
self.i = 0
def run(self):
while True:
self.i += 1
self.signal_progress_update.emit([self.i, self.total])
time.sleep(0.02)
if self.i > self.total:
break
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.resize(250, 100)
self.progressBar = QProgressBar(self)
self.progressBar.setValue(0)
self.progressBar.setFixedWidth(200)
self.progressBar.move(20, 20)
self.progressBar.setMaximum(100)
self.thread = CalculatorThread()
self.thread.signal_progress_update.connect(self.update_progress)
self.thread.start()
def update_progress(self, values):
'''
更新进度条的槽函数
'''
self.progressBar.setValue(int(values[0] / values[1] * 100))
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyWidget()
myWin.show()
sys.exit(app.exec_())
=
效果图
