[PyQt] Bug report: multiple QApplication instances cause a segfault

Baz Walter bazwal at ftml.net
Wed Jun 22 23:17:04 BST 2011


On 22/06/11 20:49, David Townshend wrote:
> On Wed, Jun 22, 2011 at 2:34 PM, Baz Walter<bazwal at ftml.net>  wrote:
>> according to the qt docs, only one application object should be created at
>> a time, and there is a global qApp pointer which refers to the current
>> instance.
>>
>> this suggests that, in pyqt, something like the following should work:
>>
>> from PyQt4 import QtGui
>> QtGui.qApp = app = QtGui.QApplication([])
>> app.quit()
>> QtGui.qApp = app = None
[snip]
> I've investigated further and found that its caused by the gtk style which I
> am using, since I am running gnome. Simply changing the qt style avoids the
> problem. I recall reading about similar issues before with the gtk-qt style,
> so I think that this is a know problem.  However, I noticed that after
> changing the style, python still segfaults on exit.  gdb indicates that it
> is something in the QApplication destructor, and it seems that deleting the
> instance after quitting solves this, e.g.:
>
>>>> from PyQt4.QtGui import QApplication
>>>> for i in range(10):
> ...     app = QApplication([])
> ...     app.quit()
> ...     del app
> ...
>>>> exit()
>
> I experimented a bit with setting qApp = None, but it didn't make a
> difference.

my point was simply that you need to make sure you remove all references 
to the current qpplication instance before creating a new one.

in general, setting qApp to the instance of qapplication isn't 
necessary. but it's worth noting that qApp won't refer to the same 
*pyqt* object unless it's explicitly over-written. this may become 
relevant when working with subclasses of qapplication. of course, if you 
don't use qApp, it won't make any difference, as you say ;-)


More information about the PyQt mailing list