from PySide2 import QtWidgets, QtCore import time import sys class SomeWidget(QtWidgets.QWidget): def __init__(self, parent=None): super(SomeWidget, self).__init__(parent) self.setWindowTitle(QtCore.qVersion()) self.thread = QtCore.QThread() self.progress = QtWidgets.QProgressDialog("", "Cancel", 0, 100, self) self.progress.setWindowModality(QtCore.Qt.WindowModal) self.progress.setAutoClose(True) self.progress.setAutoReset(True) self.worker = Worker() self.worker.moveToThread(self.thread) self.worker.update_progress.connect(self.progress.setValue) self.worker.done.connect(self.work_done) self.thread.started.connect(self.worker.do_the_thing) self.thread.start() def work_done(self): self.thread.exit() print("Done") class Worker(QtCore.QObject): update_progress = QtCore.Signal(int) done = QtCore.Signal() def do_the_thing(self): for ii in range(1, 101): time.sleep(0.1) # Simulate work self.update_progress.emit(ii) self.done.emit() if __name__ == '__main__': print(QtCore.QLibraryInfo.build()) app = QtWidgets.QApplication() widget = SomeWidget() widget.show() sys.exit(app.exec_())