<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'>You are having the same problem but in a slightly different way. &nbsp;It looks like the manual you are using is wrong, btw.<BR>
<BR>
Here are the constructors for QGraphicsPolygonItem:<BR>
<BR>
<a href="http://doc.trolltech.com/4.4/qgraphicspolygonitem.html">http://doc.trolltech.com/4.4/qgraphicspolygonitem.html</a><BR>
<BR>
</SPAN></FONT><FONT COLOR="#174FAF"><FONT FACE="Times, Times New Roman"><SPAN STYLE='font-size:12pt'><B>QGraphicsPolygonItem</B></SPAN></FONT></FONT><FONT FACE="Times, Times New Roman"><SPAN STYLE='font-size:12pt'> ( QGraphicsItem * <I>parent</I> = 0 )<BR>
<FONT COLOR="#174FAF"><B>QGraphicsPolygonItem</B></FONT> ( const QPolygonF &amp; <I>polygon</I>, QGraphicsItem * <I>parent</I> = 0 )<BR>
</SPAN></FONT><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
Note that neither take a scene. &nbsp;I wonder why your manual says that it does?<BR>
<BR>
I always create an item, and <B>then</B> add it to a scene.<BR>
<BR>
First, remove scene from your constructor and from the QGraphicsPolygonItem constructor, then change your code to something like:<BR>
<BR>
&nbsp;vertex = GuiVertex(text)<BR>
&nbsp;self.addItem(vertex)<BR>
<BR>
Brian<BR>
<BR>
On 1/21/09 2:19 PM, &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'>On 21/01/09 Brian Kelley &lt;<a href="kelley@eyesopen.com">kelley@eyesopen.com</a>&gt; wrote:<BR>
<BR>
&gt; The constructor expects a QGraphicsItem, you are giving it a canvas.<BR>
&gt;<BR>
&gt; Note that the symantics of Qcanvas and QGraphicsScene are different.<BR>
<BR>
I have further modified the GuiVertex class now. The code of drawShape<BR>
method is now located in paint. The areaPoints function is gone.<BR>
<BR>
&gt; I hope that this helps.<BR>
<BR>
Indeed, I use your construct with the QPolygonF now.<BR>
<BR>
Here is the complete new code of GuiVertex:<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, scene):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape = QPolygonF()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# quadratic shape<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape.append(QPointF(0, 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape.append(QPointF(vertexSize, 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape.append(QPointF(vertexSize, vertexSize))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape.append(QPointF(0, vertexSize))<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# test code<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;type of self: &quot;, type(self)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;type of shape: &quot;, type(shape)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;type of scene: &quot;, type(scene)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;Board.__bases__: &quot;, Board.__bases__<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QGraphicsPolygonItem.__init__(self, shape, scene)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.text = text<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scene = scene<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.inEdges = []<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.outEdges = []<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def paint(self, painter):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;painter.drawEllipse(self.x(), self.y(), vertexSize, vertexSize)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# TODO: Find a general approach to place text into the vertex<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;painter.drawText(self.x() + 0.35*vertexSize, self.y() +<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.75*vertexSize, self.text)<BR>
<BR>
<BR>
It still doesn't work:<BR>
<BR>
[mickraus@gandalf src]\$ python gui.py<BR>
type of self: &nbsp;&lt;class '__main__.GuiVertex'&gt;<BR>
type of shape: &nbsp;&lt;class 'PyQt4.QtGui.QPolygonF'&gt;<BR>
type of scene: &nbsp;&lt;class '__main__.Board'&gt;<BR>
Board.__bases__: &nbsp;(&lt;class 'PyQt4.QtGui.QGraphicsScene'&gt;,)<BR>
Traceback (most recent call last):<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 424, in &lt;module&gt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;main()<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 418, in main<BR>
&nbsp;&nbsp;&nbsp;&nbsp;gui = Gui()<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 347, in __init__<BR>
&nbsp;&nbsp;&nbsp;&nbsp;self.board.addVertex(str(v), x, y)<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 225, in addVertex<BR>
&nbsp;&nbsp;&nbsp;&nbsp;vertex = GuiVertex(text, self)<BR>
&nbsp;&nbsp;File &quot;gui.py&quot;, line 170, in __init__<BR>
&nbsp;&nbsp;&nbsp;&nbsp;QGraphicsPolygonItem.__init__(self, shape, scene)<BR>
TypeError: argument 2 of QGraphicsPolygonItem() has an invalid type<BR>
<BR>
<BR>
The constructors of QGraphicsPolygonItem drive me crazy. The manual<BR>
describes two constructors:<BR>
<BR>
__init__ (self, QGraphicsItem parent = None, QGraphicsScene scene=None)<BR>
__init__ (self, QPolygonF polygon, QGraphicsItem parent = None,QGraphicsScene scene=None)<BR>
<BR>
It tried __init__(shape, self, scene) too but it doesn't work either,<BR>
although it matches the second constructor signature.<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>