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