code.tiblab.net
こちらの記事のサンプルコードがすごくわかりやすかったので参考にさせて頂いた。ありがとうございます。
結果、ファイル選択ダイアログのフリーズを回避し、ダイアログを閉じた後(同時?)に処理を走らせることが出来た。
pythonではマルチコアを使用することは出来ないとどこかで見たけど、マルチスレッドってどういう仕組なのだろう。
import sys import time from PySide6 import QtCore, QtWidgets from PySide6.QtWidgets import (QHBoxLayout) class MainWindow(QtWidgets.QMainWindow): def __init__(self, *argv, **keywords): super(MainWindow, self).__init__(*argv, **keywords) self.move(0, 0) layout = QHBoxLayout() self.label = QtWidgets.QLabel(self) self.label.move(10, 5) layout.addWidget(self.label) self.label_2 = QtWidgets.QLabel(self) self.label_2.move(10, 30) layout.addWidget(self.label_2) self.setLayout(layout) self.thread = TestProcess(self) self.thread.signal.connect(self.setText) self.thread.start() self.thread_2 = TestProcess_2(self) self.thread_2.signal.connect(self.setText_2) self.thread_2.start() def setText(self, n): self.label.setText(str(n)) def setText_2(self, n): self.label_2.setText(str(n)) class TestProcess(QtCore.QThread): signal = QtCore.Signal(int) def run(self): n = 0 while n <= 100: self.signal.emit(n) time.sleep(0.1) n += 1 class TestProcess_2(QtCore.QThread): signal = QtCore.Signal(int) def run(self): n = 0 while n <= 100: print("start emit") self.signal.emit(n) print("end emit") time.sleep(1) n += 1 def main(): app = QtWidgets.QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec()) if __name__ == '__main__': main()
処理の流れ