[PyQt] subtel problem with event handler when disconnect - reconnect the event from within the handler AND display QMsgbox ?

Grégory Starck g.starck at gmail.com
Wed Oct 12 15:10:14 BST 2011


hi,

thx for the info.

regards,

greg.


2011/10/12 Doug Bell <dougb at bellz.org>

> Grégory Starck wrote:
> > Hi dear list,
> >
> > on windows7-64, with python32 (and also with python27) (-x86) and
> > pyqt-4.8.5-1:
> >
> > First of all: I'm quite new with Qt (pyqt).. and so I don't know all
> > of it, even more specifically about the restrictions/exceptions/etc..,
> > from far.
> >
> > in a quite simple window (just a tableWidget and few buttons
> > basically) :
> >
> > I connected the itemChanged signal/event of the tableWidget to one of
> > my method.  ( gui.tableWidget.itemChanged.connect(self.onCellChanged)
> > )
> >
> > but in this method I want to be able to eventually re-modify the value
> > of the item (depending on some conditions)..
> >
> > but doing so re-generate a itemChanged event..  so in that case my
> > method was called 1 extra time that I don't want.
> >
> > I used to work around that by : on begin of my method : I disconnect
> > the event itemChanged from my method. And on exit of my method I
> > re-connect the signal to it.
> >
> > my question is : does it sound like all right to you ??
> >
> > because with that I sometimes (but quite highly reproducible) get real
> > crash from QtCore.. but without any valuable detail.   as far as I
> > understood : it could be a problem because I disconnect-reconnect the
> > event handler from within the handler itself AND ALSO, apparently,
> > that I was also displaying a QtGui.QMessageBox  from within my method.
> > (when I remove the display of the Qmsgbox then the crash doesn't occur
> > anymore, never, as far I could see).
> >
> > Now I've totally work around the problem/crash by using a bool flag
> > that I initially set to False.  when my itemChanged event handler
> > enters : it checks for the flag. if True -> the method directly
> > returns. Else it sets the flag to True and the method executes
> > normally. before returning from it I reset the flag to False.  So that
> > if I change the value of the item in the method then the method will
> > still be called 1 extra time but I notice it thx to the flag.
>
> A cleaner way to do this is to use widget.blockSignals(True) before
> re-modifying the value and then widget.blockSignals(False) afterward.
>
> -Doug
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20111012/4a454b61/attachment.html>


More information about the PyQt mailing list