[PyQt] QMainWindow bug?

Antonio Valentino antonio.valentino at tiscali.it
Thu Jan 20 11:29:12 GMT 2011


Hi Nicola,

Il giorno Thu, 20 Jan 2011 11:55:47 +0100
Mailing List SVR <lists at svrinformatica.it> ha scritto:

> Il giorno gio, 20/01/2011 alle 10.57 +0100, Antonio Valentino ha
> scritto:
> > Hi Nicola,
> > 
> > Il giorno Thu, 20 Jan 2011 10:22:55 +0100
> > Mailing List SVR <lists at svrinformatica.it> ha scritto:
> > 
> > > Ok, in a my pyqt app (I'm still using pyqt-4.7.x), I have a dialog
> > > that require much time to open so I keep a reference to it in a
> > > app global variable and I use this reference to reopen the dialog
> > > after the first time. This seems to work and the dialog open much
> > > quicker, however in some undeterminated cases I get:
> > > 
> > > RuntimeError: underlying C/C++ object has been deleted
> > > 
> > > when I get this error I recreate the dialog and update the global
> > > reference,
> > > 
> > > can you please explain the right way to keep a reference in
> > > python to a qt object?
> > 
> > One way could be to explicitly reset the global variable
> > 
> > global_dialog = None
> > 
> > before application shutdown (e.g in QMainWindow.closeEvent)
> 
> thanks Antonio,
> 
> my problem is not the segfault on shutdown, I want to keep an object
> in memory so I can reuse it, the method explained in my previous mail
> works 99% of the times, sometime I get:
> 
> RuntimeError: underlying C/C++ object has been deleted
> 
> do you know a way to avoid that qt delete an object (apart keep a
> reference to it as explained in my previous mail)?
> 
> Nicola

Sorry Nicola, I didn't read your post with enough care.
Regarding your problem it is hart for me t figure out why a dialog that
is referenced by a python variable should be destroyed.

If the dialog has no parent then maybe you can solve your problem
setting the dialog parent to e.g. the mainwin.
Otherwise you should ensure that the dialog parent don't go out of the
scope before you detach the dialog from it.

Mah, I'm just guessing

ciao

> > regards
> > 
> > 
> > > thanks
> > > NIcola
> > > 
> > > 
> > > Il giorno mer, 19/01/2011 alle 23.47 +0100, Erik Janssens ha
> > > scritto:
> > > > there was a change in sip/pyqt from 4.8.1 to 4.8.2 regarding
> > > > the detection of objects deleted by qt but still referenced in
> > > > python (which is the case here).  in 4.8.1 sip/pyqt tried to
> > > > detect this to avoid segfaults.  this detection however brought
> > > > other issues with it, therefor the detection was turned off
> > > > again in 4.8.2
> > > > 
> > > > the solution is not to keep references in python of objects
> > > > owned by qt when they might get deleted.
> > > > 
> > > > On Wed, Jan 19, 2011 at 12:36 PM, Mailing List SVR
> > > > <lists at svrinformatica.it> wrote:
> > > > > I can confirm the segfault:
> > > > >
> > > > > - linux, kernel 2.6.36
> > > > > - python 2.7.1
> > > > > - pyqt 4.8.2
> > > > > - qt 4.7.1
> > > > >
> > > > > works fine with PySide,
> > > > >
> > > > > Nicola
> > > > >
> > > > >
> > > > > Il giorno mer, 19/01/2011 alle 08.36 +0100, Vicent Mas ha
> > > > > scritto:
> > > > >> 2011/1/18 Nick Gaens <mail at nickgaens.com>:
> > > > >> > - Win7 64bit
> > > > >> > - Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC
> > > > >> > v.1500 32 bit (Intel)] on win32
> > > > >> > - Qt v4.7.0
> > > > >> > - PyQt GPL v4.8.1 for Python v2.6
> > > > >> > Result: no crashes, works like a charm..
> > > > >> >
> > > > >>
> > > > >> Hi,
> > > > >>
> > > > >> I get the crash also on Windows Vista 32bit (again Python 2.6
> > > > >> and PyQt 4.8.2)
> > > > >>
> > > > >> Vicent


-- 
Antonio Valentino


More information about the PyQt mailing list