[PyKDE] PyQT Segfault on widget removal.
Henry Kleynhans
henry at obsidian.co.za
Wed Jun 18 13:38:01 BST 2003
Hi all,
Ok, the following seems to work ok.
# Don't do this
# self.myParent.removeChild(self.myChild)
self.myChild.deleteLater()
del self.myChild
Lemme know if you disagree with this.
TA for the help and stuph.
Kind regards,
Henry
On Wednesday 18 June 2003 13:28, Henry Kleynhans wrote:
> Hi Wido,
>
> I'm not sure that this is a proper workaround for the problem yet...or how
> to define the problem properly :-( I am experiencing the same type of
> problems in my current application, but I would have hoped that there would
> be a proper way of doing it.
>
> I would think that the problem occurs due to the fact that the signals in
> Qt are blocking, i.e. when emiting a signal, the handing method will block
> untill the signal has been handled by all objects. By that time the object
> which has emited the signal has been deleted...but that's my 5c worth.
>
> The problem might also have to do with the synchronization of deleted
> objects in the SIP library...I'm just not sure.
>
> Kind regards,
>
> Henry
>
> On Wednesday 18 June 2003 13:17, Wido Depping wrote:
> > On Wednesday 18 June 2003 12:59, Henry Kleynhans wrote:
> > > On Wednesday 18 June 2003 09:40, Vio wrote:
> > > > > >Given the recent segfault discussion, I have attached an example
> > > > > > piece of code which segfaults. I am not sure if this is a bug,
> > > > > > or just my own stupidity though. According to the PyQT book, the
> > > > > > way to remove a widget from it's parent is to do the following:
> > > > > >
> > > > > > myParent.removeChild(myChild)
> > > > > > del myChild
> > > > > >
> > > > > >The PyQT/Sip bindings seems to break if these commands gets
> > > > > > triggered by a signal from within a child widget of the widget
> > > > > > that is to be removed.
> > > > > >
> > > > > >I get a segfault when I do the following:
> > > > > >
> > > > > > 1. Run the program (testdel.py)
> > > > > > 2. Click on the DelButton button.
> > > > > > 3. Switch to another application using Alt-Tab
> > > > > > 4. Switch back to my testdel app.
> > > > > >
> > > > > >This happens under RH9.0. (Python-2.2.2-26, PyQt-3.5-5,
> > > > > > qt-3.1.1-6) I use the KDE desktop environment.
> > > > > >
> > > > > >Does anyone know if this is a bug or how to fix/workaround this?
> > > > >
> > > > > I remember similar problems usind "delete()" or "destroy()" some
> > > > > time ago - sorry, I forgot the exact method name.
> > > > > My simple workaround was to use "deleteLater()". Especially since
> > > > > "Later" appears to be calcutated in milliseconds: pretty fast.
> > >
> > > Would you use deleteLater() instead of removeChild() ?
> > > The problem is that it works if the button is not inside another widget
> > > which gets removed. If you have the button on the QMainWindow instead
> > > of the TestWidget, it works fine, but as soon as you put in into
> > > another widget it does not work.
> >
> > Thanks for the tip. Now my application runs without any problems.
> > Should this be mentioned in the FAQ until it is fixed in the next
> > release?
> >
> > Wido
> >
> > _______________________________________________
> > PyKDE mailing list PyKDE at mats.imk.fraunhofer.de
> > http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
--
Henry Kleynhans <henry at obsidian.co.za>
Obsidian Systems
More information about the PyQt
mailing list