【问题标题】:How do I emit a PySide signal with a custom python type argument?如何使用自定义 python 类型参数发出 PySide 信号?
【发布时间】:2012-07-01 21:17:35
【问题描述】:

我在 PySide python Qt 程序中正确使用信号时遇到问题。我想发出一个信号,该信号采用自定义 python 类型的单个参数。 documentation

可以使用 QtCore.signal() 类定义信号。 Python 类型 C 类型可以作为参数传递给它。

所以我尝试了以下方法:

from PySide import QtCore
from PySide.QtCore import QObject

class Foo:
    pass

class Bar(QObject):
    sig = QtCore.Signal(Foo)

    def baz(self):
        foo = Foo()
        self.sig.emit(foo)

bar = Bar()
bar.baz()

但是得到以下错误:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    bar.baz()
  File "test.py", line 12, in baz
    self.sig.emit(foo)
TypeError: sig() only accepts 0 arguments, 1 given!

如果我从 QObject 派生 Foo 类,程序运行不会出错。但是我是否应该能够将我的自定义类型作为参数传递给信号,即使该类型不是从 QObject 派生的?

这适用于 Windows 7 上的 python 2.7.2 和 PySide 1.0.4。

【问题讨论】:

    标签: python qt signals-slots pyside


    【解决方案1】:

    您创建了一个"old-style class",显然不支持将其作为信号参数类型。

    该类应继承自另一个新样式类,或从基类object 类型:

    class Foo(object):
        pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多