PyQt5-如何操作QObject对象的信号相关函数
1、信号可以通过connect(slot)函数与槽连接。
以QObject的两个信号destroyed,objectNameChanged为例:
信号:destroyed(p_object=None)
对象被销毁时发射此信号:
self.obj1 = QObject()
def objDes():
print('对象被释放了')
self.obj1.destroyed.connect(objDes)
del self.obj1
2、destroyed(p_object=None)的参数p_object是向外传递信号时,携带的释放的对象。发送信号时是将释放的对象传递给了槽函数,如果在槽函数内设置参数接收,就能输出:
self.obj1 = QObject()
def objDes(aa):
print('对象被释放了',aa)
self.obj1.destroyed.connect(objDes)
del self.obj1
3、信号:objectNameChanged(p_str)
监听某个对象名字发生改变发出信号。
self.obj1 = QObject()
def objPrint():
print('名字改变了')
self.obj1.objectNameChanged.connect(objPrint)
self.obj1.setObjectName('NEW-NAME')
4、objectNameChanged(p_str)的参数p_str,发送信号时携带的字符串,发送信号时是将这个名字传递给了槽函数。如果在槽函数内接收这个参数,就能输出改变的名字。
例如:
self.obj1 = QObject()
def objPrint(a):
print('名字改变了',a)
self.obj1.objectNameChanged.connect(objPrint)
self.obj1.setObjectName('NEW-NAME')
例中参数a就是监听的对象名字。
1、obj.objectNameChanged.connect(slot)会在应用程序启动时监听对象obj的名字改变的行为,每一次名字的改变都会向槽传递信号。
例如:
self.obj1 = QObject()
def objPrint(a):
print('名字改变了',a)
self.obj1.objectNameChanged.connect(objPrint)
self.obj1.setObjectName('NEW-A')
self.obj1.setObjectName('NEW-B')
self.obj1.setObjectName('NEW-C')
self.obj1.setObjectName('NEW-D')
从图片的例子来看,确实证明了信号与槽的连接self.obj1.objectNameChanged.connect(objPrint)一直处于工作状态,只要名字改变,就槽就会有动作。
2、如果想要断开连接可以使用disconnect()方法,
断开信号连接的写法:signal.disconnect()
例如:
self.obj1.objectNameChanged.disconnect()
图片例中可以看到,断开连接后不再像槽函数传递信息。
3、如果要想恢复连接,可以继续使用connect(slot)方法:
self.obj1.objectNameChanged.connect(objPrint)
可以看到在断开与恢复信号连接之间的信号不会被发送。
4、断开信号连接时,不但能用对象的信号来调用disconnect,也可以用对象直接调用disconnect()。
例如:self.obj1.disconnect()
1、利用对象的blocksignal方法可以临时取消信号的发送。
obj.blockSignals(blool)
参数是布尔值,当为True是取消信号发送。当为False时是恢复信号发送。
例如:
self.obj1.blockSignals(True)
self.obj1.blockSignals(False)
2、signalsBlock()函数用来判断信号是否被阻塞。
obj.signalsBlock()。返回布尔值。
False:信号没有被阻塞
True:信号被阻塞
1、receivers()函数用来获取对象接收器的数量。
obj.receivers(obj.signal)
参数是对象的信号
例如:self.obj1.receivers(self.obj1.objectNameChanged)
实际上是获取对象的某一个信号连接了几个槽函数。