是否有一种方法来告诉信号是否已经连接到一个功能?
。我想看看它的信号。siSelectionChange连接到任何
signals.siSelectionChange.connect( self.SelAsSiAssets )
您可以使用QObject.receivers
获取连接函数的计数。我使用它的方式如下,在QWidget的closeEvent()
中,我使用as窗口:
receiversCount = self.receivers(QtCore.SIGNAL("siSelectionChanged()"))
if receiversCount > 0:
self.sigChanged.disconnect()
注意参数字符串中的签名必须与实际签名匹配
因为我尝试了PyQt5,似乎不存在QtCore.SIGNAL
。我用QObject的isSignalConnected
方法尝试了它。使用此选项将面临的另一个问题是PyQt5库中没有QMetaMethod.fromSignal
。
结果我写了一个getSignal
函数。
from PyQt5.QtCore import QMetaMethod
from PyQt5.QtCore import QObject
def getSignal (oObject : QObject, strSignalName : str):
oMetaObj = oObject.metaObject()
for i in range (oMetaObj.methodCount()):
oMetaMethod = oMetaObj.method(i)
if not oMetaMethod.isValid():
continue
if oMetaMethod.methodType () == QMetaMethod.Signal and
oMetaMethod.name() == strSignalName:
return oMetaMethod
return None
from PyQt5.QtCore import pyqtSignal
if __name__ == "__main__":
class A (QObject):
sigB = pyqtSignal()
def __init__ (self):
super().__init__()
oA = A ()
print ("is 'sigB' connected:", oA.isSignalConnected (getSignal(oA, "sigB")))
oA.sigB.connect (lambda : print("sigB emitted!"))
oA.sigB.emit()
print ("is 'sigB' connected:", oA.isSignalConnected (getSignal(oA, "sigB")))
输出:is 'sigB' connected: False
sigB emitted!
is 'sigB' connected: True