2009-09-10 141 views
34

表示されるルートウィンドウを非表示にするなどの方法を知っていますか。Tk()で開きますか?通常のダイアログを使用したいだけです。Python Tkinterのルートウィンドウを削除するにはどうしたらいいですか?

ダイアログをスキップして、すべてのコンポーネントをルートウィンドウに入れる必要がありますか?それは可能か望ましいか?または、よりスマートな解決策がありますか?

+4

画像リンクは無効です。 –

答えて

47

おそらく、tkベースのアプリケーションの大半は、すべてのコンポーネントをデフォルトのルートウィンドウに置きます。すでに存在しているので、これを行う最も便利な方法です。既定のウィンドウを非表示にして独自のウィンドウを作成することを選択することは、非常に細かい作業ですが、ちょっとした追加作業が必要です。あなたが再び可視ウィンドウを作成したい場合は

import Tkinter as tk 
root = tk.Tk() 
root.withdraw() 

deiconify(またはwm_deiconify)メソッドを呼び出します。

はそれを非表示にする方法についてはあなたの特定の質問に答えるために、ルートウィンドウの withdrawメソッドを使用します。

root.deiconify() 

あなたは、ダイアログで行われたら、あなたはdestroy方法で、他の全てのTkinterのウィジェットと一緒にルートウィンドウを破壊することができます:OSXで

root.destroy() 
+0

メインウィンドウを使って、そのトリックをやった。ありがとう! –

+0

StackOverflowには、.destroy()、tkinter.Toplevel(self).destroy()、quit()、tkinter.Toplevel(self).quit()、withdraw()、iconify()を使用したソリューションがあります。ニース。それ以外は、1つ1つしか動作しません...「top_lev = tkinter.Toplevel(label); label.master.destroy(); label.destroy(); top_lev.destroy(); root = tkinter.Tk(); root.withdraw(); root.destroy() "のように動作します(いくつかの皮肉が関係しています)。 –

+0

@deusexmachina:あなたはそれらを都合よく使用すればすべて動作しますが、それらはすべて異なる目的を持っています。 '.quit()'と '.destroy()'は事実上同じですが。 –

10

私はPython/TKinter環境を持っていないのでテストしませんでしたが、これを試してみてください。

純粋なTkには、ウィンドウを管理するための "wm"というメソッドがあります。ここでは、「wm withdraw .mywindow」のようなことができます。「.mywindow」はトップレベルです。あなたがdeiconify(またはwm_deiconify)メソッドを呼び出し、再び可視ウィンドウを作成したい場合は

root = Tkinter.Tk() 
root.withdraw() # won't need this 

Tkinterでは、あなたは次のように何かを行うことができるはず。

root.deiconify() 
+0

どのように窓を上に戻しますか? – IcyFlame

+1

@IcyFlame:あなたは 'root.deiconify()'を実行してウィンドウを再表示させます。 –

+0

ありがとう、私はすでにその質問をして答えを得ています: http://stackoverflow.com/questions/15967690/showing-a-window-that-was-hidden-using-root-withdraw-in- tkinter – IcyFlame

4

、アイコン化をよりよく動作するようです:

root = Tkinter.Tk() 
root.iconify() 
0

あなたは、ウィンドウが作成された通りである「フラッシュ」にそこにしたくない場合は、このわずかなバリエーションを使用:

import Tkinter as tk 
root = tk.Tk() 
root.overrideredirect(1) 
root.withdraw() 
関連する問題