如何使用自定义python类型参数发出PySide信号?

Chr*_*uns 4 python qt signals-slots pyside

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

可以使用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()
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

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!
Run Code Online (Sandbox Code Playgroud)

如果我从QObject派生出Foo类,程序运行时没有错误.但是我不应该将我的自定义类型作为参数传递给信号,即使该类型不是从QObject派生的?

这是在Windows 7上的python 2.7.2和PySide 1.0.4.

ale*_*sdm 7

您创建了一个"旧式类",显然不支持作为信号参数类型.

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

class Foo(object):
    pass
Run Code Online (Sandbox Code Playgroud)