2016-03-07 82 views
-1

我有一个EventDispatcher类,通过pyqt的信号插槽方法与四个其他对象进行通信。在http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html我发现你可以将一个信号连接到多个插槽,并且一个插槽可以是任何Python可调用的(没有进一步的要求)。PyQt信号只拾取槽

现在我正在观察一些奇怪的行为。我有两个对象是QtWidget的子类和两个简单​​的Python对象的对象。这些对象中的每一个都具有用作EventDispatcher信号的插槽的功能。每当发出信号时,两个QWidget子对象似乎都会收到它,但两个正常的python对象不会。为什么这些普通的Python对象的槽功能没有被调用,但是这些小部件的功能呢?一个函数/类/对象是否必须满足特定的需求才能作为我在文档中找不到的插槽运行?我已经尝试制作QtCore.QObject或QtWidgets.QWidget的两个Python基础对象子类,但无济于事。

我会在下面发布我的代码,但是这个项目已经非常复杂,代码库相当长。我希望我的问题从我上面的描述中可以看出,并且预计Qt行为和/或我忽略的一个简单的事情。

回答

1

明白了。我在函数调用的本地内部创建了我的监听器变量,并将它们附加到信号中。在函数返回后,这些本地作用域变量当然会被丢弃。我的假设是,对我的侦听器对象的引用将保持活动状态,因为它们的功能是作为一个插槽连接的,但事实并非如此。通过使变量引用创建它们的对象实例的侦听器对象变量,解决了此问题。