美文网首页PYQT5学习与开发
PYQT5(3)多线程QProgressBar卡死的问题

PYQT5(3)多线程QProgressBar卡死的问题

作者: 弗兰克万岁 | 来源:发表于2018-12-22 17:38 被阅读600次
    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) 
    

    就可以成功解决问题

    相关文章

      网友评论

        本文标题:PYQT5(3)多线程QProgressBar卡死的问题

        本文链接:https://www.haomeiwen.com/subject/hqfwkqtx.html