2010-12-07 28 views
2

私は、RS-232ポートからの入力を数行チェックするWindows XP上のPython 2.7.1/Tkinter 8.4アプリケーションを開発しています。しかし、入力が到着しなければ、ループの中に永遠に座ります。Pythonがビジー状態のとき、Tkinterボタンをどのように監視できますか?

GUI上に '放棄テスト'ボタンを実装しようとしていますが、メインスレッドが入力を待っているため、ボタンが押されたときにすべてのチェックに表示されません。 私はupdate_idletasks()とtime.sleep(1)を試してみましたが、成功しませんでした。

提案がありますか?

答えて

5

Tkはシングルスレッドなので、メインスレッドがビジーの場合、GUIはフリーズします。 1つの解決策は、別のスレッドを使用して読み取りを行うことです。したがって、読み取りブロックがメインスレッドを継続することができます。入力行を取得すると、メインスレッドによって監視されるキューにプッシュすることができます。

もう1つの方法は、シリアルポートでノンブロッキング読み取りを行う方法を理解することです。データがある場合は、それを読んでください。そうでない場合は、メインイベントループに戻ります。次に、パフォーマンスのニーズに応じて、数百ミリ秒ごとにポートをポーリングするようにイベントループを設定する必要があります。

+0

私は余分なスレッドのルートを下ると思います – KermitG

関連する問題