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. 运行结果
分类:
可视化界面 / PYQT5
标签:
python可视化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具