Pythonバックエンドで、PyQt GUIが(多くの)ものを描画するのを待つ必要がないようにします。以下のコード例のようにPyQtでこれを行うより良い/正しい方法はありますか?スレッドインポートを使用する必要がありますか、それともPyQtにはそれを行う独自のより良い方法がありますか?
import time
from threading import Thread
class Backend(Thread):
def __init__(self):
super().__init__()
def run(self):
for i in range(20):
print("Backend heavy work")
time.sleep(4)
class GUI(Thread):
def __init__(self):
super().__init__()
def run(self):
for i in range(20):
print("GUI drawing stuff")
time.sleep(0.5)
if __name__ == '__main__':
thread_backend = Backend()
thread_gui = GUI()
thread_backend.start()
thread_gui.start()
Qtimerで試しましたが、動作しませんでした。ありがとうございました!
回答 1 件
関連した質問
- シングルトン内のスレッド内のPythonサービス
- Pythonのいくつかのスレッド間で変数を共有することについて
- Pythonで壊れたパイプエラーを修正する方法は? (IRCクライアントでの作業)
- Tkinter GUI、I/O、スレッド:いつキューを使用するか、いつイベントを使用するか?
- スレッド化:2番目のスレッドは並行して実行されません
- Pythonでサーバーを閉じた後、クライアントソケットでサーバーをリッスンし続けるにはどうすればよいですか?
- ブレークポイントが使用されていない場合、PyQt5ウィジェットは消えます
- Pythonのスレッドからループで例外を発生させる方法は?
- 「開始」をクリックしてストップウォッチを開始する
Qtループの外側からUIを更新することはできません。できることは、qtシグナルを使用してメソッドに接続し、ジョブを実行することです。例として
少し奇妙に見えるかもしれませんが、QtとPythonの両方の長所にうまく適合しています。おそらく、あなたの
QMainWindow
に信号を追加することも理にかなっています 既にQObject
であるクラス 。