Я только недавно научился ценить удивительность SIGNAL()
, и это не слишком сложно.
Вы хотите создать новый класс с многопоточностью:
class NetworkThing(QtCore.QThread):
def __init__(self, parent = None):
super(NetworkThing, self).__init__(parent)
def run(self):
while True:
time.wait(1.0)
# Do your background stuff, and then emit:
self.emit(QtCore.SIGNAL('messageRecieved(QString)'), 'The response text.')
Из вашей основной функции инициализации приложения вам нужно подготовить новую переменную и новый SIGNAL()
catcher:
self.networkThing = NetworkThing()
self.connect(self.networkThing, QtCore.SIGNAL('messageRecieved(QString)'), self.processEvent)
Теперь, ответ сетевого потока, который он немедленно передал функции processEvent()
.
Как примечание, PyQt4 автоматически запускает функцию run()
для NetworkThing()
, поэтому вы редко вызываете ее вручную.Вместо этого звоните self.networkThing.start()
.
Если вы хотите посмотреть на довольно хороший пример этого материала, прочитайте эту статью: http://diotavelli.net/PyQtWiki/Threading,_Signals_and_Slots.