[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