PyQt4 信号和槽详解

参照文档:

https://www.linuxzen.com/pyqt4-xin-hao-he-cao-xiang-jie.html

http://sofire.iteye.com/blog/1797845

使用起来并没有发生什么大问题,除了QtCore.SIGNAL以及QtCore.pyqtSignal的使用上出了偏差。

QtCore.pyqtSignal用来自定义一个pyqt的signal,要注意定义在pyqt的控件类的子类里,并且要作为类变量,而不是成员变量:

QtCore.pyqtSignal(int) 括号的int表示只接收一个类型为int的参数

那么关于signal的绑定有两种方式:(绑定到定义好的槽也差不多,目前没发现定义成槽有啥好处)

xxx.signal.connect(yyy.function) 通过signal绑定到具体的方法

yyy.connect(xxx,QtCore.SIGNAL('signal()'),function) 这个就有点蛋疼,因为实际上function是不固定的,意思就是说function可以和yyy没有一点关系,定义在yyy的外面都没有关系,当然了,xxx要是yyy的子控件(或者就是本身)

关于什么时候触发,也有两种方式:在控件里

self.clicked.emit() 这边关于参数的定义的话要放在signal定义的时候,需要传的参数放在这里。

self.emit(QtCore.SIGNAL("clicked()"),)后面想跟啥参数跟啥参数,槽那边或者绑定的方法记得接收就行了

这里的signal里面加不加括号有大区别,加括号意味着你里面怎么写,那边怎么收,中间有不同,就报错(和第一种触发方式一样)。但不加的话,首先那边信号接收也要不加括号,然后这边可以随便传参,那边也可以随便接收或者不接收,不会报错。

这两种中间实际有一个巨大的差别,那就是,使用第二种触发方式的话,你绝大多数并不需要真正给你的控件定义一个signal也能使用,当然了你绑定的方法也只能用第二种了。

目前只发现使用第二种绑定方法的情况下,如果你需要将这个signal绑定到transition给状态机用的话,那么不管transition那边你用哪种方式绑定,你都要定义一个signal。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 信号和槽(Signals and Slots) Qt库第一个认识到在几乎所有情况下,程序员不需要或甚至不想知道所有...
    珞珈村下山阅读 9,893评论 0 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,498评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,549评论 0 17
  • 我有时候也挺讨厌咪蒙的,尤其她唠黄嗑的时候,身为一代自媒体网红鼻祖依旧靠这种手段炒作自己,俗不俗。 但时间久了,我...
    cookie猫阅读 719评论 0 2