当前位置: 首页 > news >正文

Pyside6 + QML - 信号与槽08 - 一个函数被多个信号触发(带参数)

导言


在上一章节的基础上携带“参数”。不仅区分是 信号 A / 信号 B,还在信号里携带 点击次数。这样 QML 按钮每次点击,Python 既能知道“是谁”,也能知道“第几次”。
在这里插入图片描述
效果如下:
在这里插入图片描述
工程代码:

  • github: https://github.com/q164129345/myPyside6_QML/tree/main/basic09_one_fun_multi_signal_with_para
  • gitee: https://gitee.com/wallace89/myPyside6_QML/tree/main/basic09_one_fun_multi_signal_with_para

一、main.py


# python3.10.11 - PySide6==6.9
import sys
from PySide6.QtCore import QObject, Signal, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngineclass Backend(QObject):# 定义两个信号,带 (来源, 次数) 参数signalA = Signal(str, int)signalB = Signal(str, int)def __init__(self):super().__init__()self.signalA.connect(self.slot_handle_event)self.signalB.connect(self.slot_handle_event)# 统一的函数,接收 (来源, 次数) 参数def slot_handle_event(self, source: str, count: int):print(f"[Python] 槽函数:收到来自信号 {source} 的事件,第 {count} 次点击")if __name__ == "__main__":# 创建应用程序和引擎app = QGuiApplication(sys.argv)engine = QQmlApplicationEngine()# qml与python交互backend = Backend() # 实例化python后端对象engine.rootContext().setContextProperty("backend", backend) # 注册到QML环境(名叫 “backend”)# 加载QML文件engine.addImportPath(sys.path[0])  # 当前项目路径engine.loadFromModule("Example", "Main")  # 模块(Example) + QML文件名(Main.qml)if not engine.rootObjects():sys.exit(-1)sys.exit(app.exec())

关键点说明

# 定义两个信号,带 (来源, 次数) 参数
signalA = Signal(str, int)
signalB = Signal(str, int)# 统一的函数,接收 (来源, 次数) 参数
def slot_handle_event(self, source: str, count: int):print(f"[Python] 槽函数:收到来自信号 {source} 的事件,第 {count} 次点击")
  • 入口参数的个数与类型一定要对应上。

二、Main.qml


import QtQuick
import QtQuick.ControlsWindow {width: 320height: 240visible: truetitle: "信号与槽 06 - 一个槽响应多个信号"// 定义 countA 和 countB 属性,进行累加操作property int countA: 0property int countB: 0Column {anchors.centerIn: parentspacing: 10Button {text: "触发信号A"onClicked: {countA += 1  // 在 QML 中进行累加backend.signalA("A", countA)  // 发射信号并传递参数}}Button {text: "触发信号B"onClicked: {countB += 1  // 在 QML 中进行累加backend.signalB("B", countB)  // 发射信号并传递参数}}}
}

关键点说明

Button {text: "触发信号A"onClicked: {countA += 1  // 在 QML 中进行累加backend.signalA("A", countA)  // 发射信号并传递参数}
}Button {text: "触发信号B"onClicked: {countB += 1  // 在 QML 中进行累加backend.signalB("B", countB)  // 发射信号并传递参数}
}
  • 同理,QML侧调用信号函数时,入口参数的数量与类型一定要对应上。
http://www.dtcms.com/a/395688.html

相关文章:

  • 【第十一章】Python 调用 MySQL 全面指南:从基础到实践​
  • 新手玩家如何使用云手机
  • 【Datawhale组队学习202509】AI硬件与机器人大模型 task02 视觉感知与手眼协调
  • 基础算法---【前缀和】
  • YOLO系统——yolov1工作原理
  • 第20讲 机器学习中的分类数据
  • 《前端学习总结:GitLab、状态管理、组件库与 Umi.js》
  • 【论文阅读】理解世界还是预测未来?—— 世界模型全面综述
  • AR眼镜:远程协作与精准操作的未来之眼
  • 【论文阅读】GR-2:用于机器人操作的生成式视频-语言-动作模型
  • maven GAVP 的含义
  • 【Android】录制视频
  • RK3576-Android15_Usb白名单功能实现篇二
  • Spring中使用Apache Http客户端调第三方系统接口临时查看请求体参数
  • Linux系统-debian系的软件包管理
  • PCB工艺中的深微孔
  • 关于Pycharm中在运行出现语法错误:Non-UTF-8 code starting with
  • 构建AI智能体:四十一、大模型思维链提示工程:技术原理与行业应用案例分析
  • 鸿蒙系统中音视频的采集与播放
  • HTTPS 双向认证抓包实战,原理、难点、工具与可操作的排查流程
  • 开源跨平台文件管理工具,告别杂乱无章的数据世界
  • Node.js事件循环机制
  • Linux---文件系统
  • 循环语句效率与规范的原理及示例解析
  • Three.js 开发实战教程(四):相机系统全解析与多视角控制
  • 介绍一下SQLite的基本语法和常用命令
  • 台式电脑如何恢复出厂设置?Win10 强制重置详细教程
  • 李宏毅2023机器学习作业 HW02实操
  • 【C++实战㉜】深入C++动态内存分配:从理论到实战的进阶之路
  • 小鼠抗新冠病毒N蛋白IgG亚型抗体ELISA检测试剂盒