python关于信号与槽关联的补充

今早实测了一下,以前在网上查资料找到的信号与槽的连接,需要用到partial这个函数,代码如下

window_1.pushButton_1.clicked.connect(partial(mainform_1.connect_database_1,window_1))

上述代码放在if __name__ == '__main__'下方

这个代码是初学时在网上照葫芦画瓢写的代码,虽然乱但能用

今早试着用正规的方法改了一下,改完如下:

self.pushButton_1.clicked.connect(self.connect_database_1)

这就清晰简洁很多了,将其放在类的构造函数__init__()下方即可。

这样一看,并没有用到partial这个函数,更没有用到pyqtSignal()与emit这些函数。

有机会的话讲一下最近看到的用pyqtSignal()函数自定义信号以及其配套的emit()函数发射信号的一些理解。(好吧现在就讲了)

在通读了《Python Qt GUI与数据可视化编程》关于信号与槽这一节后,感觉pyqtSignal()并没有很高大上,反而有一种华而不实,炫技的感觉。

大概就是

你用pyqtSignal()定义了一个信号变量A,然后用A.emit(要发射的信息B)的形式将B发射到一个虚拟空间(暂认为是缓存中),然后需要定义一个槽函数C,槽函数C中有一系列动作,这个动作可以随意设置,如

def C (self):

print("接收到了A发射的信息B)

有了信号A,要发射的信息B,接收信息并进行相关后续反应的槽函数C,就可以完成信号与槽的关联了,代码如下

A.emit(要发射的信息B)        #信号发射步骤        #被发射的B信号其实是一个变量,其中存有资料

A.connect(C)                        #信号接收步骤

这两行代码就实现了pyqtSiganl()下的信号发射与接收。

其实

A.emit(要发射的信息B)        #信号发射步骤

A.connect(C)                        #信号接收步骤

self.pushButton_1.clicked.connect(self.connect_database_1)

有很多相似之处,都是【结构1】.connect(【结构2】)

pyqtSignal()中是A.emit()发射信号,然后A.connect(槽函数)接收信号,可以理解为A.emit()激活A.connect()中的槽函数

基础写法self.pushButton_1.clicked.connect(self.connect_database_1)中是

self界面的pushButton_1.clicked在按钮被点击时发射信号,然后self.connect_database_1接收信号,可以理解为【结构1】界面的按钮被点击后,发射信号激活【结构2】对应的槽函数。

一开始感觉,确实pyqtSignal()进行信号与槽的关联有些华而不实,但写到这发现,还是有些区别的。

发没发现

self.pushButton_1.clicked.connect(self.connect_database_1)这个写法中必须要有pyqtGUI界面的某个组件作为信号的发射源

A.emit(要发射的信息B)        #信号发射步骤

A.connect(C)                        #信号接收步骤

这个写法中,A、B、C全是自定义的变量,与GUI界面的组件没有一点关系。这个可能在日后会有大用处,但目前没体现。

关于@pyqtSlot()的用法,这个主要是用于对overload型信号的一个提醒,在一些情况下是可以注释掉的,我当前对它的理解就是个注释,用来告知pyqtSignal()中的槽函数C要接收的是int信号还是str信号还是其他信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值