2011-07-20 5 views
0

私はTkinterを使用するPython GUIを持っています。私は別の場所にデータを取得するためにSSHする必要があります。私はGUIをハングしないようにこれを行う新しいスレッドを開始します。この間、ユーザーに読み込み中であることを知らせる画面が表示されます。プログラムのデータ取得が終了したら、読み込み画面を閉じます。メインループでスレッドが完了したことを認識させるにはどうすればよいですか?私はメインループに存在する読み込み画面を閉じるためにそのスレッドを使用しようとしましたが、それが動作しないことを発見しました。Tkを使ってPythonで他のスレッドが終了したら、ローディング画面を閉じるにはどうしたらいいですか?

私は、GUIを使用しないプロデューサのコンシューマモデルをいくつか見てきましたが、それらはwhileループを持っています。これは私を助けません。他のパッケージをダウンロードしてインストールしたくないのですが、インポートは正常です。ご協力ありがとうございました!

答えて

0

スレッドが完了したらフラグを設定してください。 GUIが定期的にそのフラグをチェックして、それが設定されているときにウィンドウを閉じるようにします。

フラグをチェックする関数を作成することでフラグを確認できます。フラグが設定されていない場合は、afterを使用して数百ms後に再度実行されます。スレッドは終了した直後にウィンドウは消えませんが、遅れが数百ミリ秒以下である限り、ユーザーは決して気づかないでしょう。

+0

代わりに、ジャックは2次スレッドにGUIにバインドされる仮想イベントを発生させることができますか? – JAB

+0

おそらく。 Tkinterはスレッドセーフではありませんが、raiseメソッドは問題を引き起こさないでしょう。それは私が推測する価値がある。 –

+0

ありがとうブライアン!私は継続して投票するために「後」を使用するというあなたの提案を使用しました。これをポーリングし続けるのは長期間OKですか?これはシステムリソースを浪費しますか? – Jack

関連する問題