<HTML>
<HEAD>
<TITLE>Re: [PyQt] QGraphicsScene/Item/View optimisation</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>I have had great success with QtGui.QGraphicsItemAnimation alleviating the same issues that you are looking at.<BR>
<BR>
It looks like that your PictureItem is returning a really large bounding box so that caching system is repainting all or most of them at every step. &nbsp;Sometime it helps in debugging to just draw the bounding rect in red or some other obvious color for each item.<BR>
<BR>
I added a debugging code to swap the color of picture items when they are repainted:<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def paint(self, painter, options, widget):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.p += 1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x, y, w, h = self._computeRect()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if self.p % 2 == 0:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color = &quot;blue&quot;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color = &quot;white&quot;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;painter.fillRect(x, y, w, h, QtGui.QColor(color))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<BR>
<BR>
My other suggestion (that doesn&#8217;t really help in this case) is not using a thread. &nbsp;You can always fake your thread with timers, in general threads are evil and difficult to debug. &nbsp;Since python has a global interpreter lock, timers are just as fast (unless you call a long running bit of non-python code)<BR>
<BR>
class FakeThread(QtCore.QObject):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, scene):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QtCore.QObject.__init__(self)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scene = scene<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.__x = 0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.__y = 0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.count = 0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.timer = QtCore.QTimer(self)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.timer.setInterval(100)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.connect(self.timer, QtCore.SIGNAL(&quot;timeout()&quot;), self.timeout)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.timer.start()<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;def timeout(self):<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scene.setHeadPosition(self.__x, -self.__y)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.__x += 3.6<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.__y += 1.8<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.count += 1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if self.count &gt; 10000:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QtCore.quit()<BR>
<BR>
<BR>
On 2/6/09 7:34 AM, &quot;Fr&eacute;d&eacute;ric&quot; &lt;<a href="frederic.mantegazza@gbiloba.org">frederic.mantegazza@gbiloba.org</a>&gt; wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Le 5/2/2009, &quot;Grissiom&quot; &lt;<a href="chaos.proton@gmail.com">chaos.proton@gmail.com</a>&gt; a &eacute;crit:<BR>
<BR>
&gt; I think you may try some CacheFlag or OptimizationFlag in QGraphicsView, see:<BR>
&gt;<BR>
&gt;<a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicsview.html#CacheModeFlag-enum">http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicsview.html#CacheModeFlag-enum</a><BR>
&gt;<a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicsview.html#OptimizationFlag-enum">http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicsview.html#OptimizationFlag-enum</a><BR>
<BR>
I tried these flags, but they didnt change anything :o(<BR>
<BR>
I attached a short example to show my problem. As soon as the crosshair<BR>
starts to move, the CPU goes to 100%!<BR>
<BR>
Any idea to improve that code?<BR>
<BR>
--<BR>
&nbsp;&nbsp;&nbsp;Fr&eacute;d&eacute;ric<BR>
<BR>
</SPAN></FONT></BLOCKQUOTE>
</BODY>
</HTML>