信号(Signal)与槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制。当事件或者状态发生改变时,就会发出信号,信号会触发所有与这个事件(信号)相关的函数(槽);一个信号可以连接多个槽,一个槽也也可监听多个信号。关于PyQtAPI中信号与槽的更多详细解释,可以参考官方网站:https://www.riverbankcomputing.com/static/Docs/PyQt5/signals_slots.html?hightlight=pyqtsignal#P与Qt.QtCore.pyqtSignal

1、内置信号与槽的使用

指在发射信号时,使用窗口控件的函数,而不是自定义的函数。本例将一个按钮对象内置clicked信号连接到自定义的槽函数cao(),点击“点击我测试”按钮,就会弹出一个信息提示框。

#0、导入需要的包和模块from PyQt5.Qt import *import sys

#1、创建一个应用程序对象。app=QApplication(sys.argv)

#2、控件的操作#创建控件window=QWidget()

btn = QPushButton(window)btn.setText("点击我测试")

def cao():    QMessageBox.information(window,"信息提示框","点我干嘛")

btn.clicked.connect(cao)

#设置控件(大小、位置、样式...)window.setWindowTitle("Python数据分析实例")window.resize(300,300)window.move(400,200)

#展示控件window.show()

#3、应用程序的执行,进入到消息循环sys.exit(app.exec_())

2、自定义信号与槽的使用

指在发射信号时,不使用窗口控件的函数,而是利用自定义的函数,即使用pyqtSignal类实例发射的信号。内置函数只包含常用的信号,有些信号找不到对应的内置函数,只有特定情况下如按钮事件才能发射这种信号,其次,传递的参数是特定的,因此,使用自定义信号更灵活地实现实际业务逻辑,比如在程序中某个地方需要发射一个信号,传递多种数据类型(参数),然后在槽函数中接受传递过来的数据。

使用PyQt5.QtCore.pyqSignal()函数可以为QObject创建一个信号,使用pyqtSignal()函数可以把信号定义为类的属性。信号必须在类创建时定义,不能再类创建后作为类的属性动态的添加。

classFoo(QObject):# This will cause problems because each has the same C++ signature.valueChanged=pyqtSignal([dict],[list])#为控件创建信号

#传递一个参数from PyQt5.QtCore import  QObject,pyqtSignal#信号对象class QTypeSignal(QObject):    #生成一个信号    sendmsg=pyqtSignal(str)

    def __init__(self):        super(QTypeSignal, self).__init__()

    def run(self):        #发射信号        self.sendmsg.emit("Python数据分析实例")

    #槽对象class QTypeSlot(QObject):    def __init__(self):        super(QTypeSlot, self).__init__()    #槽对象中的槽函数    def get(self,msg):        print("QSlot get msg=>"+msg)

if __name__ =="__main__":    # 把信号绑定到槽对象中的槽函数get()上,槽函数能接受到所发射的信号”Python数据分析实例“,数据成功传递。    send =QTypeSignal()    slot =QTypeSlot()    #**************将信号与槽函数绑定起来**************开始

    send.sendmsg.connect(slot.get)

    send.run()    #************将信号与槽函数绑定起来****************结束

    #*************把信号与槽函数连接断开***************开始    send.sendmsg.disconnect(slot.get)

    send.run()    #*************把信号与槽函数连接断开***************结束

#传递两个或多个参数,同理

from PyQt5.QtCore import QObject, pyqtSignal

# 信号对象class QTypeSignal(QObject):    # 生成一个信号    sendmsg = pyqtSignal(str,str)

    def __init__(self):        super(QTypeSignal, self).__init__()

    def run(self):        # 发射信号(两个参数)        self.sendmsg.emit("Python数据分析实例","Brook")

# 槽对象class QTypeSlot(QObject):    def __init__(self):        super(QTypeSlot, self).__init__()

    # 槽对象中的槽函数    def get(self, msg1,msg2):        print("QSlot get msg=>" + msg1+' '+ msg2)

if __name__ == "__main__":    # 把信号绑定到槽对象中的槽函数get()上,槽函数能接受到所发射的信号”Python数据分析实例“,数据成功传递。    send = QTypeSignal()    slot = QTypeSlot()    # **************将信号与槽函数绑定起来**************开始

    send.sendmsg.connect(slot.get)

    send.run()    # ************将信号与槽函数绑定起来****************结束

    # *************把信号与槽函数连接断开***************开始    send.sendmsg.disconnect(slot.get)

    send.run()    # *************把信号与槽函数连接断开***************结束

其他信号与槽高级用法,后续详细介绍。

qwidget show 是否有信号_PyQt5信号与槽机制入门(一)相关推荐

  1. pyqt 槽任意参数_PyQt5信号与槽机制入门(一)

    信号(Signal)与槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制.当事件或者状态发生改变时,就会发出信号,信号会触发所有与这个事件(信号)相关的函数(槽):一个信号可 ...

  2. 【QT|趣谈】最详细的信号槽机制介绍!

    用最有趣的方式解释信号槽通讯机制 1 导语:信号槽的前世今生 2 QT的信号槽 2.1什么是信号槽? 2.2 用严谨的语言解释信号槽 3 信号槽实战 3.1 信号槽实例 4 信号槽plus 4.1 L ...

  3. pyqt 槽任意参数_PyQt5快速入门(二)PyQt5信号槽机制

    PyQt5快速入门(二)PyQt5信号槽机制 一.信号槽机制简介 1.信号槽简介 信号槽是Qt的核心机制,也是PyQt编程中对象进行通信的机制.在Qt中,QObject对象和PyQt中所有继承自QWi ...

  4. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析

    本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下. PyQt5已经自动定义了很多QT内建的信号.但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义signal.可以 ...

  5. PyQt5(五)信号与槽机制

    信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方. 信号和槽是 ...

  6. QT 的信号与槽机制介绍

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  7. python PyQt5中文教程☞【第五节】PyQt5事件(Event)和信号(信号槽 Signals slots)

    引用文章:http://code.py40.com/pyqt5/22.html 在这一部分的pyqt5教程中,我们将探讨PyQt5中的事件Event 文章目录 事件 Event 信号槽 Signals ...

  8. QT对象树、信号和槽机制

    文章目录 一 .对象树是什么? 二.信号和槽的基本概念 2.1 信号 2.2 槽 2.3 松散耦合 2.4 特点 三.示例 总结 一 .对象树是什么? 对象树是由父类和若干子类对象组成,而子类也可以由 ...

  9. 【qt】QT 的信号与槽机制

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

最新文章

  1. 解题报告:luoguP1462 通往奥格瑞玛的道路(二分、最短路)
  2. 【万里征程——Windows App开发】DatePickerFlyout、TimePickerFlyout的使用
  3. iPad Pro变生产力工具,你还缺这个轻量级浏览器端代码编辑器
  4. 【移动开发】Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)...
  5. 用python爬虫抓站的一些技巧总结
  6. 2020-07-15 CVPR2020 表示学习论文讨论(4) 笔记
  7. 给opentaps添加定制的表和字段
  8. 现实世界的Windows Azure:与iQmetrix的市场营销副总裁Anne Weiler对话
  9. java list容器_Java 容器列表(三)- ArrayList
  10. opencv 像素操作
  11. oracle dblink使用
  12. Java生成UUID方式
  13. fdisk分区以及格式化磁盘简要步骤
  14. 解决异常 more than one ‘primary‘ bean found among candidates: [jacksonObjectMapper, objectMapper]
  15. 1T免费全能空间 注册即可开通
  16. uni-app学习笔记--浏览vue-cli创建uni-app模板的文件结构
  17. Android利用jsoup爬虫爬网页数据(二)
  18. pytorch整理(三)
  19. 访问认证(三):Bearer
  20. 浅谈开发与研发之差异

热门文章

  1. Voovan网络编程介绍
  2. mybatis ------ 懒加载(八)
  3. python二次开发odoo_odoo二次开发 - 战鹏的Blog - OSCHINA - 中文开源技术交流社区
  4. 黑莓桌面管理器4.2_虚拟桌面管理器行业现状调研分析及发展趋势预测报告(2020)...
  5. linux 2种循环,只以换行符分割,不以空格分割。
  6. linux 如何自定义安装路径,Linux下安装mysql并自定义数据的存储路径
  7. android java写文件_Android中文件的读写(一)----流操作
  8. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画
  9. DotNetCore中异步编程的实用演练
  10. 在Visual Studio中使用C#脚本(CSX脚本)生成代码