[PyQt] Segmentation fault using QThread
Flavio
sixdegreesoit at yahoo.it
Sun Sep 16 11:51:47 BST 2007
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'))
)
More information about the PyQt
mailing list