3.6 多线程中信号与槽的使用

一、多线程中信号与槽的使用

1.基本概念

  • 应用:通过创建多线程,使用主线程更新页面,使用子线程实时处理数据,最后将结果显示到页面上

2.案例

  • 定义了后台线程类BackendThread 来模拟后台耗时操作,在这个线程类中定义了信号 update_date。
  • 使用 BackendThread 线程类在后台处理数据,每秒发射一次自定义信号update_date。
  • 初始化窗口界面时,定义后台线程类 BackendThread,并把线程类的信号update_date 连接到槽函数 handleDisplay()。
  • 后台线程每发射一次信号,就可以把最新的时间值实时显示在前台窗口的QLineEdit文本对话框中。

3.代码

"""
    【简介】
    多线程更新跟新数据,pyqt5界面实时刷新例子
"""

from PyQt5.QtCore import QThread, pyqtSignal, QDateTime
from PyQt5.QtWidgets import QApplication, QDialog, QLineEdit
import time
import sys


class BackendThread(QThread) :
    # 通过类成员对象定义信号对象
    update_date = pyqtSignal(str)

    # 处理要做的业务逻辑
    def run(self) :
        while True :
            data = QDateTime.currentDateTime()               #获取当前事件
            currTime = data.toString("yyyy-MM-dd hh:mm:ss")  #格式化
            self.update_date.emit(str(currTime))             #发射信号
            time.sleep(1)                                    #时间间隔 1s跳转一下


class Window(QDialog) :
    def __init__(self) :
        QDialog.__init__(self)
        self.setWindowTitle('pyqt5界面实时更新例子')
        self.resize(400, 100)
        self.input = QLineEdit(self)
        self.input.resize(400, 100)
        self.initUI()

    def initUI(self) :
        # 创建线程
        self.backend = BackendThread()
        # 连接信号 和槽
        self.backend.update_date.connect(self.handleDisplay)
        # 开始线程
        self.backend.start()

    # 槽 :将当前时间输出到文本框
    def handleDisplay(self, data) :
        self.input.setText(data)


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

4. 运行结果

posted @   Trouvaille_fighting  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示

目录导航