hi,<div><br></div><div>thx for the info.<div><br></div><div>regards,</div><div><br></div><div>greg.</div><div><br><br><div class="gmail_quote">2011/10/12 Doug Bell <span dir="ltr"><<a href="mailto:dougb@bellz.org">dougb@bellz.org</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">Grégory Starck wrote:<br>
> Hi dear list,<br>
><br>
> on windows7-64, with python32 (and also with python27) (-x86) and<br>
> pyqt-4.8.5-1:<br>
><br>
> First of all: I'm quite new with Qt (pyqt).. and so I don't know all<br>
> of it, even more specifically about the restrictions/exceptions/etc..,<br>
> from far.<br>
><br>
> in a quite simple window (just a tableWidget and few buttons<br>
> basically) :<br>
><br>
> I connected the itemChanged signal/event of the tableWidget to one of<br>
> my method. ( gui.tableWidget.itemChanged.connect(self.onCellChanged)<br>
> )<br>
><br>
> but in this method I want to be able to eventually re-modify the value<br>
> of the item (depending on some conditions)..<br>
><br>
> but doing so re-generate a itemChanged event.. so in that case my<br>
> method was called 1 extra time that I don't want.<br>
><br>
> I used to work around that by : on begin of my method : I disconnect<br>
> the event itemChanged from my method. And on exit of my method I<br>
> re-connect the signal to it.<br>
><br>
> my question is : does it sound like all right to you ??<br>
><br>
> because with that I sometimes (but quite highly reproducible) get real<br>
> crash from QtCore.. but without any valuable detail. as far as I<br>
> understood : it could be a problem because I disconnect-reconnect the<br>
> event handler from within the handler itself AND ALSO, apparently,<br>
> that I was also displaying a QtGui.QMessageBox from within my method.<br>
> (when I remove the display of the Qmsgbox then the crash doesn't occur<br>
> anymore, never, as far I could see).<br>
><br>
> Now I've totally work around the problem/crash by using a bool flag<br>
> that I initially set to False. when my itemChanged event handler<br>
> enters : it checks for the flag. if True -> the method directly<br>
> returns. Else it sets the flag to True and the method executes<br>
> normally. before returning from it I reset the flag to False. So that<br>
> if I change the value of the item in the method then the method will<br>
> still be called 1 extra time but I notice it thx to the flag.<br>
<br>
</div></div>A cleaner way to do this is to use widget.blockSignals(True) before<br>
re-modifying the value and then widget.blockSignals(False) afterward.<br>
<br>
-Doug<br>
_______________________________________________<br>
PyQt mailing list <a href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt" target="_blank">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><br>
</blockquote></div><br></div></div>