Hi all,
i'm getting a segmentation fault when using a QThread to run a background 
task. here is a minimal program reproducing my problem

import sys, time
from PyQt4 import QtGui, QtCore

app = QtGui.QApplication(sys.argv)
win = QtGui.QMainWindow()
table = QtGui.QTextEdit()
win.setCentralWidget(table)
win.show()

def update_table(data):
    table.clear()
    table.setHtml(data)

class workerThread(QtCore.QThread):
    def __init__(self, r):
        self.request = r
        self.result = ''
        self.signal = QtCore.SIGNAL("thread_done(PyObject*)")
        QtCore.QThread.__init__(self)
    
    def run(self):
        # simulate a time consuming computation
        self.result = self.request.replace('e', 'oa'); time.sleep(5)
        
        # result ready
        self.emit(self.signal, self.result)

thread = workerThread(u'test')
app.connect(thread, QtCore.SIGNAL("thread_done(PyObject*)"), update_table)
thread.start()

app.exec_()


the programs runs just fine, but i get a segmentation fault as soon as i close 
the window (but not if i do before thread has finished).
What's strange is that everything is fine if a don't use unicode strings (i.e 
replace u'test' with just 'test' or use self.result = 
str(self.request.replace...) )

Am i doing something wrong, or is this just a bug?

python version 2.4.4
pyqt version 4.0.1
debian etch

Thanks in advance.

P.S. is it required to keep references to emit arguments in the thread class 
as i've read on this list? why? (i.e. using
self.emit(self.signal, self.result)
instead of
self.emit(QtCore.SIGNAL("thread_done(PyObject*)"), 
self.request.replace('e', 'oa'))
)
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to