PyQt: Podłączanie sygnału do gniazda w celu rozpoczęcia operacji w tle

Mam następujący kod, który wykonuje operację w tle (scan_value) podczas aktualizacji paska postępu w interfejsie użytkownika (progress).scan_value iteruje nad pewną wartością wobj, emituje sygnał (value_changed) za każdym razem, gdy wartość zostanie zmieniona. Z powodów, które nie są tutaj istotne, muszę zawinąć to w obiekt (Scanner) w innym wątku. Skaner jest wywoływany, gdy przycisk ascan jestclicked. A oto moje pytanie ... poniższy kod działa poprawnie (tzn. Pasek postępu jest aktualizowany na czas).

# 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)

Ale jeśli zmienię ostatnią część na to:

thread = QThread()
scanner = Scanner()
scan.clicked.connect(scanner.scan) # This was at the end!
scanner.moveToThread(thread)
thread.start()

Pasek postępu jest aktualizowany tylko na końcu (domyślam się, że wszystko działa na tym samym wątku). Czy powinno być nieistotne, czy podłączę sygnał do gniazda przed przeniesieniem obiektu do obiektu.

questionAnswers(2)

yourAnswerToTheQuestion