当前位置 主页 > 网站技术 > 代码类 >

    PyQt5多线程刷新界面防假死示例

    栏目:代码类 时间:2019-12-13 12:06

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

    wxpython多线程刷新界面转到

    https://www.jb51.net/article/176308.htm

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

    from PyQt5 import QtWidgets, QtCore
    import sys
    from PyQt5.QtCore import *
    import time
     
     
    # 继承QThread
    class Runthread(QtCore.QThread):
      # 通过类成员对象定义信号对象
      _signal = pyqtSignal(str)
     
      def __init__(self):
        super(Runthread, self).__init__()
     
      def __del__(self):
        self.wait()
     
      def run(self):
        for i in range(100):
          time.sleep(0.2)
          self._signal.emit(str(i)) # 注意这里与_signal = pyqtSignal(str)中的类型相同
     
     
    class Example(QtWidgets.QWidget):
     
      def __init__(self):
        super().__init__()
        # 按钮初始化
        self.button = QtWidgets.QPushButton('开始', self)
        self.button.setToolTip('这是一个 <b>QPushButton</b> widget')
        self.button.resize(self.button.sizeHint())
        self.button.move(120, 80)
        self.button.clicked.connect(self.start_login) # 绑定多线程触发事件
     
        # 进度条设置
        self.pbar = QtWidgets.QProgressBar(self)
        self.pbar.setGeometry(50, 50, 210, 25)
        self.pbar.setValue(0)
     
        # 窗口初始化
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('OmegaXYZ.com')
        self.show()
     
        self.thread = None # 初始化线程
     
      def start_login(self):
        # 创建线程
        self.thread = Runthread()
        # 连接信号
        self.thread._signal.connect(self.call_backlog) # 进程连接回传到GUI的事件
        # 开始线程
        self.thread.start()
     
      def call_backlog(self, msg):
        self.pbar.setValue(int(msg)) # 将线程的参数传入进度条
     
     
    if __name__ == "__main__":
      app = QtWidgets.QApplication(sys.argv)
      myshow = Example()
      myshow.show()
      sys.exit(app.exec_())

    效果:

    以上这篇PyQt5多线程刷新界面防假死示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持IIS7站长之家。