PyQt5多线程刷新界面防假死

本文共349个字,预计阅读时间需要2分钟。

在做GUI界面时我们希望后台任务能够与UI分开,在PyQt中,主线程用来重绘界面。而子线程里边的实时处理结果需要反馈到界面,子线程里边不能执行界面更新操作。

wxpython多线程刷新界面转到

wxpython多线程防假死与线程间传递消息

下面给出类Python3+PyQt5多线程防假死动态刷新界面的模板

 

注意下面的可以放多个参数,不止可以放一个str。

注意import方式,如果不是

得在pyqtSignal前加上相应的上层

效果

8 位极客在 “PyQt5多线程刷新界面防假死” 留下足迹

  1. 您好,
    我的程序是这样的 主界面点击按钮 然后进行爬虫 爬虫结束后弹出另一界面 显示数据
    一开始爬虫的时候 主界面会显示未响应 然后弄了多线程 可以了 可是我的数据显示界面弹不出来
    显示错误:QObject::setParent: Cannot set parent, new parent is in a different thread
    请问这个问题该如何解决 谢谢~

    • 代码如下:class MyMain(QWidget,Ui_movsys):
      def __init__(self,parent = None):
      super(MyMain,self).__init__(parent)
      self.setupUi(self)

      self.btn1.clicked.connect(self.get_info)
      # self.btn2.clicked.connect(self.pri)
      self.btn3.clicked.connect(self.piaofang)
      # self.btn4.clicked.connect(self.rank)
      # self.btn5.clicked.connect(self.pri)

      def get_info(self):
      self.thread= RunThread()
      self.thread.start()

      class Info(QWidget,Ui_Info):
      def __init__(self):
      super(Info,self).__init__()
      self.setupUi(self)

      class RunThread(QThread):
      trigger = pyqtSignal()
      def __init__(self,parent = None):
      super(RunThread,self).__init__(parent)

      def __del__(self):
      self.wait()

      def run(self):
      txt = main.txt_movie.toPlainText()
      info(txt)
      info_show = Info()
      btn_ok = QMessageBox.information(main, “提醒”, “数据获取完毕”, QMessageBox.Ok)
      if btn_ok == QMessageBox.Ok:
      info_show.show()#到这里 界面出不来
      self.trigger.emit()

  2. 您好,方便请教一个问题吗?
    我用pyqt做了一个监控界面,主界面分两个窗口,左边是常规视频播放,右边是隔一段时间读取摄像头图片进行目标检测后的结果显示,我把常规摄像头播放进了Qthead里运行,但是我右边进行检测的时候左边会出现播放卡死,等计算完成后才能恢复,这种问题要怎么解决呢?
    感谢~

      • 好的,谢谢,我试试,这里还有个多线程的问题,多个线程无法给予公平的执行时间,cpu时间分配会倾向于更加耗资源的线程,这样会不会导致常规播放卡顿呢?python有没有办法控制这个呢?

评论