美文网首页
PyQt4 信号和槽详解

PyQt4 信号和槽详解

作者: 邓楼平 | 来源:发表于2017-06-28 01:42 被阅读0次

    参照文档:

    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。

    相关文章

      网友评论

          本文标题:PyQt4 信号和槽详解

          本文链接:https://www.haomeiwen.com/subject/flpycxtx.html