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