On Thu, 12 Sep 2013 10:30:06 -0400, lloyd konneker <boo...@nc.rr.com> wrote: > This is an update to my previous post. > Here is an abstract of the code for easier reading: > > > class B(object): > def __init__(self): > self.a1 = A() > self.a1.signal1.connect(self.handler) # Fails in PyQt, succeeds > in PySide > > def handler(self): > pass > > > class A (Mixin, SubclassOfQObject): > def __init__(self): > super().__init__() > > class Mixin(object): > signal1 = Signal() > def __init__(self): > super().__init__() > > > > Again, AFAIK this works in PySide, but not in PyQt. > The MRO of a1, an instance of class A, is (Mixin, SubclassOfQObject, > QObject, object). > And Mixin.__init__ calls super, which calls QObject.__init__ for > instance a1, > so the signal instance should be bound by the time its connect method is
> called? > > I found that a workaround is to eliminate the mixin: > > > class A (SubclassOfQObject): > signal1 = Signal() > def __init__(self): > super().__init__() > > ... methods that were in Mixin ... > > > I just don't understand why. Should I submit an executable test case? PyQt emulates the Qt behaviour - signals can only be defined in QObject sub-classes. The error message assumes that Qt classes are always the first super-class. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt