<HTML>
<HEAD>
<TITLE>Re: [PyQt] QGraphicsPolygonItem / porting from QCanvas to QGraphicsScene</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>The constructor expects a QGraphicsItem, you are giving it a canvas.<BR>
<BR>
Note that the symantics of Qcanvas and QGraphicsScene are different. <BR>
<BR>
Here is a stupid example:<BR>
<BR>
class HideButton(QtGui.QGraphicsPolygonItem):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;fgcolor = QtGui.QColor(20,20,20, 180)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;bgcolor = QtGui.QColor(180,180,180)<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, parent):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = QtCore.QPointF<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points = QtGui.QPolygonF()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// these points are relative to the parent<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for poly in (p(-6,-6),p(6,-6),p(0,6)):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points.append(poly)<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QtGui.QGraphicsPolygonItem.__init__(self, points, parent)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.setBrush( QtGui.QBrush( self.bgcolor &nbsp;) )<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.setPen( QtGui.QPen(self.fgcolor,2) )<BR>
<BR>
Now we can add a hide button as a child of another graphics item...<BR>
&nbsp;&nbsp;<BR>
&nbsp;&nbsp;self.button = HideButton(item)<BR>
<BR>
And this will take care of rendering with the parent is visible.<BR>
<BR>
To add the top level item to the scene:<BR>
<BR>
&nbsp;&nbsp;scene.addItem( item )<BR>
<BR>
And then make sure to add this scene to your view.<BR>
<BR>
I hope that this helps.<BR>
On 1/21/09 8:38 AM, &quot;Michael Krauss&quot; &lt;<a href="hippodriver@gmx.net">hippodriver@gmx.net</a>&gt; wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Hello list members,<BR>
<BR>
i am porting a program from PyQt3 to PyQt4. It formerly used QCanvas<BR>
and QCanvasView. Now i am using QGraphicsScene and QGraphicsView.<BR>
<BR>
I replaced QCanvasPolygonalItem with QGraphicsPolygonItem but its<BR>
constructor doesn't work as expected.<BR>
<BR>
The old code:<BR>
<BR>
class GuiVertex(QCanvasPolygonalItem):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'''<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Graphical representation of a vertex<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'''<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, text, canvas):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QCanvasPolygonalItem.__init__(self, canvas)<BR>
[...]<BR>
<BR>
The new code:<BR>
<BR>
class GuiVertex(QGraphicsPolygonItem):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'''<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Graphical representation of a vertex<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'''<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, text, canvas):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QGraphicsPolygonItem.__init__(self, canvas)<BR>
[...]<BR>
<BR>
The error message:<BR>
<BR>
[mickraus@gandalf src]\$ python gui.py<BR>
Traceback (most recent call last):<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 420, in &lt;module&gt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;main()<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 414, in main<BR>
&nbsp;&nbsp;&nbsp;&nbsp;gui = Gui()<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 343, in __init__<BR>
&nbsp;&nbsp;&nbsp;&nbsp;self.board.addVertex(str(v), x, y)<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 221, in addVertex<BR>
&nbsp;&nbsp;&nbsp;&nbsp;vertex = GuiVertex(text, self)<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 157, in __init__<BR>
&nbsp;&nbsp;&nbsp;&nbsp;QGraphicsPolygonItem.__init__(self, canvas)<BR>
TypeError: argument 1 of QGraphicsPolygonItem() has an invalid type<BR>
<BR>
According to the manual<BR>
<a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicspolygonitem.html">http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicspolygonitem.html</a><BR>
the constructor expects a QGraphicsItem. As GuiVertex is a (sub)^4class<BR>
of QGraphicsItem I don't understand the TypeError. The second argument<BR>
passed to QGraphicsPolygonItem.__init__ in line 221 is of type<BR>
&quot;class Board(QGraphicsScene)&quot;.<BR>
<BR>
<BR>
Kind regards,<BR>
Michael Krauss<BR>
_______________________________________________<BR>
PyQt mailing list &nbsp;&nbsp;&nbsp;<a href="PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><BR>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><BR>
<BR>
</SPAN></FONT></BLOCKQUOTE>
</BODY>
</HTML>