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 [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt