[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():
  qApp.lock()
  try:
    w = TestWidget()
    w.show()
    del w
  finally:
    qApp.unlock()
app = QApplication( sys.argv )
theEventFilter = EventFilter()
qApp.installEventFilter( theEventFilter )
main = QLabel( 'main', None )
main.show()
app.setMainWidget( main )
t = threading.Thread( target=createWidget )
t.start()
app.exec_loop()
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