在文章使用PyQt5制作界面(实现界面与代码的分离)(二)中,实现了界面与代码的分离,但是需要手工进行信号与槽函数的绑定,那么能不能实现信号和超函数的自动绑定呢? 答案当然是肯定的。 废话不说,直接上过程 1.制作界面 在该界面中点击按钮,然后设置标签的内容,功能很简单,主要是演示单击信号和槽函数是如何自动绑定的。 将该界面转换为python代码:
注意该该界面中,按钮的名称或者对象名是语句设定的, self.btn_set.setObjectName("btn_set")按钮的名字设定为btn_set 同时大家注意:在setupUi函数的最后一句有这样的话: QtCore.QMetaObject.connectSlotsByName(Form)这句话什么意思呢?实现对象通过名字来自动绑定槽函数,也就是说如果槽函数的名字与对象某个事件的名字相同,将会实现自动绑定,行不行呢? 新增加一个python文件AutoBind.py,代码如下:
在这个代码中,大家注意几个问题: 1.在构造函数
里面没有手工绑定信号和槽函数的代码 在槽函数
中也没有添加什么代码,只是这个名字很特殊,名字是on_btn_set_clicked,这个名字是on_对象名_事件名组成,因为QtCore.QMetaObject.connectSlotsByName(Form)这个语句允许对象通过名字将事件(信号)与槽函数自动连接,这样,我们就不用手工绑定了。代码就能够自动运行。 以上的方法要求槽函数的名字必须遵守一定的规则,这样信号(事件)与槽函数就能自动绑定。 当然还有一些情况比较复杂,不过都可以实现自动绑定的,这样可以省事不少,具体可以参开网址 http://pyqt./Docs/PyQt5/signals_slots.html?highlight=connectslotsbyname
|
|
来自: 刮骨剑 > 《PyQt5 教程(2)》