pyqtSignal和QObject.receivers(..)

PaK*_*man 4 python pyqt pyside

在发出之前,我需要检查信号是否存在侦听器.

class Test(QObject):
    test = pyqtSignal(str,dict)
    def run(self):
        if self.receivers(SIGNAL("test(str,dict)"):
           self.test.emit('blablabla',{})`
Run Code Online (Sandbox Code Playgroud)

信号连接到插槽右侧并成功发出信号.
检查签名信号时,该方法QObject.receivers()显示该信号未连接.
我理解,理由是签名不正确,我没有找到方法,指定信号的忠实签名.

Sud*_*idu 8

在 pyqt5 SIGNAL 中已弃用。它被替换为每个 QObject 的信号属性

如果QObject .receivers( QObject . signal ) > 0:

    print('signal connected')
Run Code Online (Sandbox Code Playgroud)

检查 QPushButton 信号 clicked() 是否连接到任何插槽

button = QPushButton()
.
.
if button.receivers(button.clicked) > 0:
    .....
Run Code Online (Sandbox Code Playgroud)


ale*_*sdm 5

信号的签名是"test(QString, PyQt_PyObject)".

很明显,str映射到QString和其他本机python对象类型dict,list...被映射到C++类型PyQt_PyObject.

信号签名列表可以通过QMetaObject与您的对象关联获得:

test = Test()
metaobject = test.metaObject()
for i in range(metaobject.methodCount()):
    print(metaobject.method(i).signature())
Run Code Online (Sandbox Code Playgroud)