[PyKDE] Using thread and event filter crashes Python

Yann COINTEPAS yann at sapetnioc.org
Wed Jul 6 09:40:41 BST 2005

Setting an event filter to the QApplication singleton and using threads lead 
to a Python crash due to a double deletion of a widget (at Python level). 
This happens with PyQt 3.14.1 and sip 4.2.1. I don't know if it is the same 
for other versions.

For example, the following code:

import sys, threading
from qt import *

class EventFilter( QObject ):
  def eventFilter( self, o, e ):
    return False

class TestWidget( QWidget ):
  def __init__( self ):
    print '!init TestWidget!', threading.currentThread()
    QWidget.__init__( self )

  def __del__( self ):
    print '!del TestWidget!', threading.currentThread()

def createWidget():
    w = TestWidget()
    del w

app = QApplication( sys.argv )

theEventFilter = EventFilter()
qApp.installEventFilter( theEventFilter )

main = QLabel( 'main', None )
app.setMainWidget( main )

t = threading.Thread( target=createWidget )


Produces the following output:

!init TestWidget! <Thread(Thread-1, started)>
!del TestWidget! <Thread(Thread-1, started)>
!del TestWidget! <Thread(Thread-1, started)>
Segmentation fault

I even try to create widgets only from the main thread (instead of using 
qApp.lock/qApp.unlock) by using a QTimer and a queue of functions and 
arguments. But the result is the same.
Yann Cointepas                         Tel: +33 1 69 86 78 52
CEA - SHFJ                             Fax: +33 1 69 86 77 86
4, place du General Leclerc
91401 Orsay Cedex France

More information about the PyQt mailing list