PyQt: Is signal / slot really working across threads?

Alexander Eisenhuth newsuser at stacom-software.de
Tue May 29 08:03:06 EDT 2007


Ok, thanks.

Phil Thompson schrieb:
> 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