私はtkinterを使ってPython GUIアプリケーションを構築しています。 基本的には、別のスレッドで開始して統合していますが、通信には入出力キューを使用しています。PythonのTkinter after()関数はCPUをジャンプします
GUI側(tkinterのmainloop()があるメインスレッド)では、mainloopの繰り返しごとに呼び出される関数を追加したいと思います(私はリアルタイムで情報を処理して表示しています)。私はちょうどself.loop_id = self.after(1, self.loop)
を呼び出すプログラムを起動するときながら
def loop(self):
try:
output_type, data = wlbt.output_q.get_nowait()
pass # if got something out of the queue, display it!
except Queue.Empty:
pass
self.loop_id = self.after(1, self.loop)
:
だから私の機能は、そのようなことを行います。
だから、私を気に二つのこと:
- ループ機能は30%-50%でCPU使用率を上げます。私はそれを無効にする場合、それは良いです。
- リフレッシュレートを最大限に高めるために
after_idle()
を使用したいと思っていますが、それを置き換えることができませんでした。
私には完全に理解できないことがあります。これらの問題に取り組むためには何ができますか?
メインループにリソースがあるたびに実行したい場合、どうしたらよいですか? 'after_idle()'でそれを行うべきですか?もしそうなら、どうですか? – galah92
@ galah92:私のアドバイスは、私が書いたものです:あなたの機能を20秒または30秒ごとに呼び出します。人間のディスプレイを更新することを目標としている場合は、それよりも頻繁にチェックを行うことは、計算サイクルを無駄にするだけです。 –