web-dev-qa-db-ja.com

Python Tkinterルートウィンドウを削除するにはどうすればよいですか?

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

ダイアログをスキップして、すべてのコンポーネントをルートウィンドウに配置する必要がありますか?それは可能ですか、それとも望ましいですか?または、よりスマートなソリューションはありますか?

54
Jonas Byström

おそらく、tkベースのアプリケーションの大部分は、すべてのコンポーネントをデフォルトのルートウィンドウに配置します。これは既に存在するため、これを行う最も便利な方法です。デフォルトのウィンドウを非表示にして独自のウィンドウを作成することを選択するのは完全に素晴らしいことですが、ほんの少しの余分な作業が必要です。

非表示にする方法に関する特定の質問に答えるには、ルートウィンドウの withdraw メソッドを使用します。

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

ウィンドウを再び表示したい場合は、 deiconify (またはwm_deiconify)メソッドを呼び出します。

root.deiconify()

ダイアログが完了したら、 destroy メソッドを使用して、他のすべてのtkinterウィジェットとともにルートウィンドウを破棄できます。

root.destroy()
75
Bryan Oakley

Python/TKinter環境がないのでテストしていませんが、試してみてください。

純粋なTkには、ウィンドウを管理するための「wm」というメソッドがあります。そこでは、「。mywindow」がトップレベルである「wm withdraw .mywindow」のようなことができます。

TkInterでは、次のようなことができるはずです。

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

ウィンドウを再び表示したい場合は、 deiconify (またはwm_deiconify)メソッドを呼び出します。

root.deiconify()
13
Carlos Tasada

OSXでは、iconifyの方がうまく機能しているようです:

root = Tkinter.Tk()
root.iconify()
7
qed

ウィンドウが作成されるときに「フラッシュ」にしたくない場合は、このわずかなバリエーションを使用します。

import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
1
BuvinJ

Python 3.0以降では、ウィンドウを非表示にするには、次のように記述する必要があります。

import tkinter
tkinter.Tk().withdraw()