[PyQt] moveToThread() does not cope with functools.partial
Giuseppe Corbelli
giuseppe.corbelli at copanitalia.com
Tue Apr 23 09:08:23 BST 2013
Please see the minimal test code below. In short connecting a signal to a
functools.partial slot breaks the expected moveToThread behaviour.
Reasonable, I'd say, once you think about it. I'm just asking some suggestion
about how this issue can be addressed. I thought about reimplementing some
signal class with a connect_partial method that stores bound args.
Python 2.7.3, Qt 4.8.2, PyQt 4.10 on Linux.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import functools
from PyQt4 import QtCore
class CApp(QtCore.QCoreApplication):
mysignal = QtCore.pyqtSignal()
class CA(QtCore.QObject):
def standard_slot(self):
print "standard_slot", QtCore.QThread.currentThreadId()
def partial_slot(self, param):
print "partial_slot", param, QtCore.QThread.currentThreadId()
app = CApp(sys.argv)
print "CApp", QtCore.QThread.currentThreadId()
thread = QtCore.QThread()
a = CA()
a.moveToThread(thread)
thread.start()
while not thread.isRunning():
pass
app.mysignal.connect(a.standard_slot, QtCore.Qt.QueuedConnection)
app.mysignal.connect(functools.partial(a.partial_slot, "aParam"),
QtCore.Qt.QueuedConnection)
timer = QtCore.QTimer()
timer.setInterval(1000)
timer.timeout.connect(app.mysignal.emit)
timer.start()
app.exec_()
--
Giuseppe Corbelli
WASP Software Engineer, Copan Italia S.p.A
Phone: +390303666318 Fax: +390302659932
E-mail: giuseppe.corbelli at copanitalia.com
More information about the PyQt
mailing list