2012-02-18 16 views
0

私のIDEのPythonシェルとTkinterウィンドウの間に問題があります。私がしようとしているのは、シェル内にユーザの入力をすべて入れておき、Tkinterウィンドウに対応する情報を出力したいのです。Python Tkinterウィンドウ出力とシェル入力

しかし、自分のウィンドウが作成されてポップアップすると、シェルでプログラムを続けるために閉じます。次に入力を続けます。しかし、私は私のウィンドウを再初期化しようとします。それは窓が破壊されたと言います。私はこれが何を意味するのか理解しているので、クローズすることができる情報を出力し、ルートウィンドウを非表示にするToplevelウィンドウを試してみましたが、ルートウィンドウを閉じる/破壊するまでシェルは続行しません。

ルートウィンドウを破壊せずにシェルで続ける方法はありますか?私はこの言語にかなり慣れているので、どんな助けも非常に高く評価されるでしょう。

これは私の一般的な考え方です:事前に

from Tkinter import * 

#get all my info from the shell 

root = Tk() 
root.withdraw() #hide the root window 

main = Toplevel() 
    #this is the window that I want to be able to close and open later 

#get more info from the shell after main is closed 

#now I want to open the updated main window 

ありがとう! (そして、それが重要な場合、私はWindows上で働いています)

答えて

1

私はあなたがこれをやろうとしている方法が最も効率的な方法ですが、私はこれまでのところ、これらの変更を提案するかどうかわからない:

from Tkinter import * 

#get all my info from the shell 

window = Tk() 
window.iconify() #hide the root window 

#get more info from the shell after main is closed 

window.deiconify() 
window.mainloop() # to handle events 

私はroot-Windowの名前を変更して何が起きているのかを明確にし、超巨大な(imho)追加のToplevel-windowを削除しました!

また、メインループと必要なイベントハンドラがないと何も達成できないことに注意してください。

1

簡単に言えば、これはTkinterが動作するように設計されたものではありません。 Tkinterは、一度作成された単一のルートウィンドウと、実行中の単一のイベントループを持つように設計されました。これを他の方法で使用すると、望ましくない動作につながる可能性があります。

このように動作するコードが本当に必要な場合は、1つのプロセスでシェルからの入力を収集し、別のプロセスを使用してtkinterウィンドウを表示します。ソケットを使用して通信するか、引数、環境変数、または一時ファイルを介して親から子にデータを渡すことができます。

関連する問題