[PyQt] multiple inheritance and signals problem, mixin before QObject

lloyd konneker bootch at nc.rr.com
Thu Sep 12 00:32:38 BST 2013

I am trying to switch from PySide to PyQt.

The following code seemed to work in PySide:

class FramedViewedTextGlyph(CompositeGlyph, ViewSizeable, Proxiable, 
QGraphicsItemGroup): # no class inherits QObject
   def __init__(self):
     super(FramedViewedTextGlyph, self).__init__() # init group necessary?

     # Children
     self.viewedText = self._initChildGlyph(childGlyph=ViewedTextGlyph())
     # new style signals, could not get this to work in PyQt
self.viewedText.viewSizeChanged.connect(self._resizeFrameAndProxy)# line 52

class ViewedTextGlyph(TextView, QGraphicsTextItem): # ! QGTI inherits 
   def __init__(self):
     super(ViewedTextGlyph, self).__init__()

class TextView(object):
   # Mixin
   viewSizeChanged = Signal(QSizeF)
   def __init__(self):
     super(TextView, self).__init__()
   def emitSizeChange(self):
     self.viewSizeChanged.emit(self.viewSize)    # line 315

With PyQt I get:

Program error:  Program error: <b>TypeError'>: connect() failed between 
[QSizeF] and unislot()</b> on line 52, file framedViewedTextGlyph.py
Object::connect: Use the SIGNAL macro to bind ViewedTextGlyph::(QSizeF)

So I changed the connect to the old style:

QtCore.SIGNAL('viewSizeChanged(QSizeF)'), self._resizeFrameAndProxy)

Now I get:

Program error:  Program error: <b>AttributeError'>: signal was not 
defined in the first super-class of class 'ViewedTextGlyph'</b> on line 
315, file textview.py

But it appears to me that the signal IS defined in the first 
super-class, which is TextView.

I see some examples where the mixin follows the Qt class in the MRO.  I 
tried that, with appropriate?? changes to the init calls).  I also tried 
the original ordering, but with TextView inheriting QObject instead of 
object (and appropriate?? explicit init calls.)  No luck.

I don't want you to debug my code, but any hints?  At worst, I will 
simplify the mixin inheritance, or do away with the signals altogether.

More information about the PyQt mailing list