参照文档:
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。
网友评论