PyQt: Is signal / slot really working across threads?
Phil Thompson
phil at riverbankcomputing.co.uk
Tue May 29 07:18:47 EDT 2007
On Tuesday 29 May 2007 11:58 am, Alexander Eisenhuth wrote:
> Hello pyqt users,
>
> i tried to use signal / slot across threads. With the following example I
> want to emit a signal when the thread loop is entered. The connected slot
> is never called. Why?
>
> Any help is very welcome ...
>
> Alexander
>
> import time
> import sys
> import PyQt4
> from PyQt4.QtCore import (QObject, QThread)
> SIGNAL = PyQt4.QtCore.SIGNAL
>
> class CancelableQtThread_(QThread):
>
> def __init__(self):
> QThread.__init__(self)
> self.sigStarted = SIGNAL("sigStarted()")
>
> def run(self):
> print "Enter thread"
> self.emit(self.sigStarted)
> time.sleep(0.1)
> print "Leave thread"
>
> class TestSigSlot(QObject):
>
> def __init__(self):
> QObject.__init__(self)
> self._thread = CancelableQtThread_()
> self.connect(self._thread, self._thread.sigStarted, self.Called)
> self._thread.start()
>
> time.sleep(1.0)
>
> def Called(self):
> print "Called !"
>
> if __name__ == "__main__":
> obj = TestSigSlot()
Signals across threads are implemented using the event loop. You don't have an
event loop running in your main thread - you don't even have a
QCoreApplication instance.
Phil
More information about the Python-list
mailing list