【问题标题】:PyQt signals only picked up by slots ofPyQt 信号仅由
【发布时间】:2016-06-21 04:11:22
【问题描述】:

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

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

我会在下面发布我的代码,但是该项目已经相当复杂并且代码库很长。我希望我的问题从我上面的描述中很明显,并且这是预期的 Qt 行为和/或我忽略的一个简单的事情..

【问题讨论】:

    标签: python qt pyqt signals-slots pyqt5


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 2016-11-13
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      相关资源
      最近更新 更多