一般来说,QProgressBar 的应用都会做一些延时的操作,这样就会造成主线程卡ui,PyQt中的线程可以完美地解决这个问题,本示例采用python中的time模块进行延时,并且将该延时操作放到子线程中去执行,实现Qt的UI实时刷新。
import sys import time from PyQt5.QtCore import QThread, pyqtSignal from
PyQt5.QtWidgets import QWidget, QPushButton, QProgressBar, QVBoxLayout,
QApplication class Thread(QThread): _signal = pyqtSignal(int) #定义信号类型为整型 def
__init__(self): super(Thread, self).__init__() def __del__(self): self.wait()
def run(self): for i in range(100): time.sleep(0.1) self._signal.emit(i) #发射信号
class Example(QWidget): def __init__(self): super(Example, self).__init__()
self.setWindowTitle('QProgressBar') self.btn = QPushButton('启动线程')
self.btn.clicked.connect(self.btnFunc) #连接槽函数 self.pbar = QProgressBar(self)
self.pbar.setValue(0) self.resize(300, 300) self.vbox = QVBoxLayout()
self.vbox.addWidget(self.pbar) self.vbox.addWidget(self.btn)
self.setLayout(self.vbox) self.show() def btnFunc(self): self.thread = Thread()
#实例化线程 self.thread._signal.connect(self.signal_accept)
#将线程累中定义的信号连接到本类中的信号接收函数中 self.thread.start()
#启动线程,启动线程直接调用线程中的start方法,这个方法会调用run函数,所以不用调用run函数 self.btn.setEnabled(False)
def signal_accept(self, msg): self.pbar.setValue(int(msg)) # 将线程的参数传入进度条 if
self.pbar.value() == 99: self.pbar.setValue(0) self.btn.setEnabled(True) if
__name__ == "__main__": app = QApplication(sys.argv) ex = Example() ex.show()
sys.exit(app.exec_())
效果: 

 

技术
©2019-2020 Toolsou All rights reserved,
Java中的lambda表达式如何理解——精简html+css+js制作简单网站首页java作业VHDL——4选1数据选择器C++OpenCV实战——车牌去雾、车牌检测、分割JAVA阶段考内容知识点的梳理计算机组成原理的简单学习java连接数据库实现基本的增删改查2022年第十三届蓝桥杯题解(全)3 4j不是合法的python表达式_3+4j不是合法的Python表达式。