GUI

Python Tkinter Event Loop(6) ネストされたイベント処理

これまで説明した3つのアプローチは、Tk GUIの応答性を維持しながら長時間実行される操作を処理するための正しい方法。これらに共通するのは、あらゆる種類のイベントを継続的に処理する単一のイベントループであること。このイベントループはアプリケーションのコードにあるイベントハンドラを呼び出し、ハンドラはその処理をしてすぐに戻ってくる。

もう一つの方法がある。長時間実行される操作の中で、イベントループを呼び出して大量のイベントを処理することができる。これは、updateという一つのコマンドで可能。タイマーイベントや非同期I/Oに煩わされることはない。タイマイベントや非同期I/Oに煩わされることなく、updateコールを操作の随所に散りばめるだけでよい。もし、画面の再描画だけを維持し、他のイベントを処理したくない場合は、そのためのオプション(update_idletasks)も用意されている。

このアプローチは魅惑的なほど簡単でうまくいく可能性があるが、遅かれ早かれ、深刻な問題が発生する可能性がある。(何かが更新されない、呼び出されるべきイベントハンドラが呼び出されない、イベントが見つからない、順番通りに実行されない、あるいはもっと悪いことが起こる。)