PyQt のメイン ウィンドウとスレッド間のデータ共有
質問:
PyQt を使用する場合、メイン ウィンドウとスレッド間でデータを効果的に共有するにはどうすればよいですか?
答え:
スレッド間でのデータの共有には、特に PyQt などの GUI アプリケーションで慎重な取り扱いが必要です。その方法は次のとおりです:
共有ウィジェットを避ける:
ウィジェットにはメイン スレッドでのみアクセスしてください。他のスレッドからアクセスしようとすると、未定義の動作が発生します。
シグナルとスロットの利用:
Qt のシグナルとスロット メカニズムを使用して通信チャネルを確立します。スレッドからシグナルを発行して、データの変更をメイン ウィンドウに通知します。メイン ウィンドウのスロットを接続して信号を処理し、それに応じて更新します。
例:
スレッドがメイン ウィンドウのスピンボックス値を継続的に更新するシナリオを考えてみましょう。
<code class="python"># in main window self.worker = Worker(self.spinbox.value()) self.worker.beep.connect(self.update) self.spinbox.valueChanged.connect(self.worker.update_value) class Worker(QtCore.QThread): beep = QtCore.pyqtSignal(int) def __init__(self, sleep_time): super(Worker, self).__init__() self.running = False self.sleep_time = sleep_time def run(self): self.running = True i = 0 while self.running: i += 1 self.beep.emit(i) time.sleep(self.sleep_time) def stop(self): self.running = False def update_value(self, value): self.sleep_time = value</code>
ベスト プラクティス:
以上がPyQt メイン ウィンドウと別のスレッド間でデータを共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。