Как передать сигнал PySide с пользовательским аргументом типа python?

У меня проблемы с использованием сигналов в моей программе 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()

Но получите следующую ошибку:

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!

Если вместо этого я извлекаю класс Foo из QObject, программа запускается без ошибок. Но я не должен быть в состоянии передать свой пользовательский тип в качестве аргумента сигнала, даже если этот тип не является производным от QObject?

Это с Python 2.7.2 и PySide 1.0.4 на Windows 7.

1 ответ

Решение

Вы создали "класс старого стиля", который явно не поддерживается в качестве типа параметра сигнала.

Класс должен наследоваться от другого класса нового стиля или от базового object тип:

class Foo(object):
    pass
Другие вопросы по тегам