PyQt: подключение сигнала к слоту для запуска фоновой операции
У меня есть следующий код, который выполняет фоновую операцию (scan_value
) при обновлении индикатора выполнения в пользовательском интерфейсе (progress
).scan_value
перебирает некоторое значение вobj
, испускающий сигнал (value_changed
) каждый раз, когда значение изменяется. По причинам, которые здесь не актуальны, я должен обернуть это в объект (Scanner
) в другой теме. Сканер вызывается, когда кнопкаscan
являетсяclicked
, И тут возникает мой вопрос ... следующий код работает нормально (т.е. индикатор выполнения обновляется вовремя).
# I am copying only the relevant code here.
def update_progress_bar(new, old):
fraction = (new - start) / (stop - start)
progress.setValue(fraction * 100)
obj.value_changed.connect(update_progress_bar)
class Scanner(QObject):
def scan(self):
scan_value(start, stop, step)
progress.setValue(100)
thread = QThread()
scanner = Scanner()
scanner.moveToThread(thread)
thread.start()
scan.clicked.connect(scanner.scan)
Но если я изменю последнюю часть на это:
thread = QThread()
scanner = Scanner()
scan.clicked.connect(scanner.scan) # This was at the end!
scanner.moveToThread(thread)
thread.start()
Индикатор выполнения обновляется только в конце (я предполагаю, что все работает в одном потоке). Должно ли это быть неактуально, если я подключу сигнал к слоту до или после перемещения объекта, принимающего объект, в поток.