我有一个EventDispatcher类,它通过pyqt的signal-slot方法与其他四个对象进行通信。在http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html上,我发现您可以将单个信号连接到多个插槽,并且插槽可以是任何Python可调用的(无需进一步要求)。
现在我正在观察一些奇怪的行为。我有两个对象是QtWidget的子类,两个对象是简单的Python对象。这些对象中的每一个都有一个函数,用作EventDispatcher信号的一个槽。每当发出信号时,两个QWidget子对象似乎确实接收到它,但两个普通的python对象却没有。为什么不调用那些普通Python对象的槽函数,而是那些小部件的槽函数呢?函数/类/对象是否必须满足特定要求才能充当我在文档中找不到的插槽?我已经尝试制作QtCore.QObject或QtWidgets.QWidget的两个Python基础对象子类,但无济于事。
我会在下面发布我的代码,但该项目已经相当复杂,代码库也很长。我希望我的问题从我上面的描述中显而易见,并且预期Qt行为和/或我忽略的简单事情......
答案 0 :(得分:1)
知道了。我在函数调用中本地创建了我的侦听器变量,我还将它们附加到信号中。函数返回后,这些局部范围的变量当然被丢弃了。我的假设是,对我的侦听器对象的引用将保持活动状态,因为它们的功能是作为一个插槽连接的,但事实并非如此。通过使变量引用我创建它们的对象实例的侦听器对象变量,这个问题就解决了。