PyQt(Python+Qt)学习随笔:什么是信号绑定(Unbound and Bound Signals)?
1、概述
信号的绑定是由在类的实例变量中第一次通过类实例的方式(即"self.信号"或“实例名.信号”)引用时触发,PyQt5会自动将该实例绑定到该信号,以便创建绑定信号。
绑定信号具有实现相关功能的connect()、disconnect()和emit()方法。
2、绑定的触发
从信号绑定过程可以看出信号的引用与通用的类变量有所区别,在实例方法中只能通过"self.信号"或或“实例名.信号”方式引用,不能通过类名引用,否则无法触发信号与实例的绑定,就无法调用connect()等相关信号的方法。
老猿发现这种绑定不只是应用的代码通过"self.信号"或“实例名.信号”能触发,在Debug模式下实例的构造方法完成超类构造方法调用后,通过Debug观察"self.信号"方式也能触发,这是因为Python是解释型语言导致的。
3、绑定信号的本质理解
在Debug模式下绑定后的信号观察时结构示例如下:

可以看到实例化后的信号其实与类变量已经不是一个变量,已经变成了一个类似实例变量的存在,每个实例有自己单独的绑定信号,不像Python的类变量,是在类的所有实例中共享的。因此PyQt的信号绑定老猿认为可以理解为:信号这一个特殊的类变量,在定义信号的类实例化一个对象实例后,当这个实例首次通过“self.信号”或“实例名.信号”引用时,自动构造一个与信号相关的实例变量,并与代码中定义的原有信号类变量同名并关联,这就是绑定信号。
4、小结
总体来说,实际上信号的绑定就是在信号对应类的实例内完成创建一个实例信号变量,这个变量与类内定义的信号已经不是同一个对象,而是通过“实例.信号”方式触发创建的一个新变量。因此同一个类的不同实例的“self.信号”是不同的,它们各自发出的信号是各自的,互不干扰,当一个类的信号绑定的槽是类的实例方法时,这个类不同的实例发送信号时响应的是该实例自己的实例方法,其他实例的槽方法不会响应。

老猿Python,跟老猿学Python!
PyQt(Python+Qt)学习随笔:什么是信号绑定(Unbound and Bound Signals)?的更多相关文章
- PyQt(Python+Qt)学习随笔:Designer中QDialogButtonBox确认clicked信号是哪个按钮发送的方法
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的clicked信号参数QAbstractButton *解决办法
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...
- PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...
- PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...
- PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性
老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...
- PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响
老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系&g ...
- PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系
老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑>中,老猿觉得dragE ...
- PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项
老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性
accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...
随机推荐
- 思科ASA放行主/被动FTP
实验环境: 设备说明: internet是一台windows10,用于模拟外网客户 ASA是思科ASA防火墙 FTP-SERVER是Centos7,Centos7上安装了vsftpd 实验说明: 本文 ...
- 使用css控制table的cellspacing和cellpadding属性
HTML默认的表格样式之间有间隙,每次为了解决这些问题,总要在table标签里添加cellspacing和cellpadding,你是否也很厌倦这样的写法, 那么有没有对应的CSS属性能达到相同的效果 ...
- JAVA内存模型和Happens-Before规则
前言 上一篇文章王子给大家介绍了并发编程中比较关心的三个核心问题,可见性.有序性和原子性. 今天我们继续来探索并发编程的内容,聊一聊JAVA的内存模型和Happens-Before规则. JAVA内存 ...
- Spring源码之@Lazy和预实例化
https://www.cnblogs.com/yanze/p/10243348.html 懒加载优缺点 优点:懒加载,对象使用的时候才去创建:启动速度快,节省资源 缺点:不利于提前发现错误:初次请求 ...
- Adaboost算法的一个简单实现——基于《统计学习方法(李航)》第八章
最近阅读了李航的<统计学习方法(第二版)>,对AdaBoost算法进行了学习. 在第八章的8.1.3小节中,举了一个具体的算法计算实例.美中不足的是书上只给出了数值解,这里用代码将它实现一 ...
- rbd的image快照与Pool快照
前言 这个问题是不久前在ceph社区群里看到的,创建image的时候,当时的报错如下: 2016-12-13 23:13:10.266865 7efbfb7fe700 -1 librbd::image ...
- bWAPP----PHP Code Injection
PHP Code Injection 主要代码 1 <div id="main"> 2 3 <h1>PHP Code Injection</h1> ...
- (i春秋 Misc)ReCreators - CryMisc
[i春秋 Misc] [题目链接] i春秋 Misc ReCreators CryMisc ReCreators 下载得到一个文件.老规矩,放入010文本编辑器中查看: 文件头是: KDMV 不清楚. ...
- 阿里面试官:小伙子,给我说一下Spring 和 Spring Boot 的区别吧
前言 对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,相信对 ...
- css3系列之过渡transition
transition 设置变换属性的过渡效果,举个例子,也就是说, 如果从width100px 变成 width200px,要以什么方式进行变换,速度,时间,类型等. transition trans ...