def init_progress(parent):
m = wake_progress()
parent.progress = m
m.run()
if not m.window.isVisible():
m.window.show()
#激活方法
class wake_progress(QThread):
#线程类
def __init__(self):
super().__init__()
self.window = QMainWindow()
self.p=''
def run(self):
self.p =file_upload_statu_bar(self.window)
class file_upload_statu_bar(progress_bar):
#原始类
def __init__(self,Form):
print('progress bar')
self.window=Form
super().__init__()
self.setupUi(Form)
self.window.show()
def change(self,name):
self.label.setText(name)
出现进度条的线程卡死的情况
最后通过参考自知诸狭的文章
其中一段:
对于执行很耗时的程序来说,由于PyQt需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿;而如果在执行这个耗时程序时不断地运行QApplication.processEvents(),那么就可以实现一边执行耗时程序,一边刷新页面的功能,会给人一种相对更流畅的感觉,QApplication.processEvents()的使用方法是,在主函数执行耗时操作的地方,加入QApplication.processEvents(),processEvents()函数的使用方法简单来说就是刷新页面。
于是在循环内加入
from PyQt5.QtWidgets import QApplication
def slotAdd(self):
for n in range(10):
str_n = 'File index {0}'.format(n)
self.listFile.addItem(str_n)
QApplication.processEvents()#这一句是关键
time.sleep(1)
就可以成功解决问题
网友评论