[PyQt] Problem connecting signal and slot between a QGraphicsItem and QGraphicsScene

Phil Thompson phil at riverbankcomputing.com
Wed Dec 23 22:33:36 GMT 2009

On Wed, 23 Dec 2009 11:17:14 -0800 (PST), dizou <di_zou at yahoo.com> wrote:
> I have a class that inherits the QGraphicsItem and QObject. In the
> mousePressEvent() function, it emits a signal. I want to connect this
> signal
> with a function in the QGraphicsItem's QGraphicsScene. This is what I
> class DisplayItem(QGraphicsItem, QObject):
>     def __init__(self):
>         QGraphicsItem.__init__(self)
>         QObject.__init__(self)
>     def mousePressEvent(self, event):
>         self.update()
>         self.emit(SIGNAL("updateItemSelected()"))
>         QGraphicsItem.mousePressEvent(self, event)
> class DisplayScene(QGraphicsScene):
>     def __init__(self, parent):
>         QGraphicsScene.__init__(self, parent)
>     def DisplayChildren(self, item, graphViews, x, y):
>         dispItem = item.GetDisplayItem() #This returns a DisplayItem()
> object
>         dispItem.setGraphView(graphViews[0])
>         dispItem.setPos(x, y)
>         self.connect(dispItem, SIGNAL("updateItemSelected()"),
> self.ItemSelected)
>         self.addItem(dispItem)
> When I run this and call the DisplayScene.DisplayChildren() function, I
> this error:
> self.connect(dispItem, SIGNAL("updateItemSelected()"), self.ItemSelected)
> SystemError: error return without exception set

PyQt doesn't support sub-classing from two wrapped classes. PyQt v4.7 will
raise an exception if you try.

If you are using Qt v4.6 then sub-class from QGraphicsObject instead.


More information about the PyQt mailing list