PyQt5-如何操作QObject对象的信号相关函数

2025-10-18 13:09:05

1、信号可以通过connect(slot)函数与槽连接。

以QObject的两个信号destroyed,objectNameChanged为例:

信号:destroyed(p_object=None)

对象被销毁时发射此信号:

self.obj1 = QObject()

 

def objDes():

 

   print('对象被释放了')

 

self.obj1.destroyed.connect(objDes)

 

del self.obj1

PyQt5-如何操作QObject对象的信号相关函数

2、destroyed(p_object=None)的参数p_object是向外传递信号时,携带的释放的对象。发送信号时是将释放的对象传递给了槽函数,如果在槽函数内设置参数接收,就能输出:

self.obj1 = QObject()

 

def objDes(aa):

 

   print('对象被释放了',aa)

 

self.obj1.destroyed.connect(objDes)

 

del self.obj1

PyQt5-如何操作QObject对象的信号相关函数

3、信号:objectNameChanged(p_str)

监听某个对象名字发生改变发出信号。

self.obj1 = QObject()

 

def objPrint():

 

   print('名字改变了')

 

self.obj1.objectNameChanged.connect(objPrint)

 

self.obj1.setObjectName('NEW-NAME')

PyQt5-如何操作QObject对象的信号相关函数

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就是监听的对象名字。

PyQt5-如何操作QObject对象的信号相关函数

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)一直处于工作状态,只要名字改变,就槽就会有动作。

PyQt5-如何操作QObject对象的信号相关函数

2、如果想要断开连接可以使用disconnect()方法,

断开信号连接的写法:signal.disconnect()

例如:

self.obj1.objectNameChanged.disconnect()

图片例中可以看到,断开连接后不再像槽函数传递信息。

PyQt5-如何操作QObject对象的信号相关函数

3、如果要想恢复连接,可以继续使用connect(slot)方法:

self.obj1.objectNameChanged.connect(objPrint)

可以看到在断开与恢复信号连接之间的信号不会被发送。

PyQt5-如何操作QObject对象的信号相关函数

4、断开信号连接时,不但能用对象的信号来调用disconnect,也可以用对象直接调用disconnect()。

例如:self.obj1.disconnect()

PyQt5-如何操作QObject对象的信号相关函数

1、利用对象的blocksignal方法可以临时取消信号的发送。

obj.blockSignals(blool)

参数是布尔值,当为True是取消信号发送。当为False时是恢复信号发送。

例如:

self.obj1.blockSignals(True)

 

self.obj1.blockSignals(False)

PyQt5-如何操作QObject对象的信号相关函数

2、signalsBlock()函数用来判断信号是否被阻塞。

obj.signalsBlock()。返回布尔值。

False:信号没有被阻塞

True:信号被阻塞

PyQt5-如何操作QObject对象的信号相关函数

1、receivers()函数用来获取对象接收器的数量。

obj.receivers(obj.signal)

参数是对象的信号

例如:self.obj1.receivers(self.obj1.objectNameChanged)

实际上是获取对象的某一个信号连接了几个槽函数。

PyQt5-如何操作QObject对象的信号相关函数

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢