Как передать сигнал 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