Есть простой пример использования QThread. Простой окно с кнопкой запуска процесса. Каждая итерация процесса изменяет текст на кнопке. При этом само окно не виснет и доступно.
Python
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import time
class Worker(QObject):
finished = pyqtSignal()
message = pyqtSignal(int)
@pyqtSlot()
def process(self):
print 'START'
for i in range(10):
print 'sleep', i
self.message.emit(i)
time.sleep(0.5)
print 'FINISHED'
self.finished.emit()
class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super(MyWidget, self).__init__(*args, **kwargs)
self.button = QPushButton("Start process", self)
self.button.clicked.connect(self.start)
layout = QVBoxLayout(self)
layout.addWidget(self.button)
self.resize(250, 150)
def start(self):
thread = QThread(self)
worker = Worker()
worker.moveToThread(thread)
# thread.started.connect(worker.process)
self.connect(thread, SIGNAL('started()'), worker, SLOT('process()'))
worker.finished.connect(thread.quit)
worker.message.connect(self.text)
thread.start()
def text(self, i):
self.button.setText('Process '+str(i))
app = QApplication([])
widget = MyWidget()
widget.show()
app.exec_()
Никаких ошибок нет, но не срабатывает запуск процесса worker.process, на который законекчен сигнал started() самого потока. То есть вся работа должна начаться, когда Thread запущен, но ничего не происходит. Возможно я где-то что-то не до конектил?
Спасибо.