2012-06-30 6 views
4

J'ai des problèmes pour utiliser correctement les signaux de mon programme PySide python Qt. Je veux émettre un signal qui prend un seul argument d'un type python personnalisé. Le documentation ditComment émettre un signal PySide avec un argument de type python personnalisé?

Signals can be defined using the QtCore.signal() class. Python types and C types can be passed as parameters to it.

J'ai donc essayé les éléments suivants:

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() 

Mais l'erreur suivante:

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! 

Si, au contraire, je tire la classe Foo de QObject, le programme court sans erreur. Mais ne devrais-je pas être en mesure de transmettre mon type personnalisé en tant qu'argument au signal, même si ce type ne dérive pas de QObject?

est avec python 2.7.2 et PySide 1.0.4 sur Windows 7.

Répondre

7

Vous avez créé un "old-style class", qui est apparemment pas pris en charge comme un type de paramètre de signal.

La classe doit hériter d'une autre classe nouveau style, ou à partir du type de base object:

class Foo(object): 
    pass 
Questions connexes