子を閉じるときに閉じないtkinterの子供Toplevel()
ウィンドウをどのように生成するのですか?親と閉じないtkinterトップレベルウィンドウを作成する
子ウィンドウの「参照カウント」を保持する必要がありますか?WM_DELETE_WINDOW
を傍受し、すべての子がなくなったときにのみroot.destroy()
を呼び出しますか?
スレッド
のプロセスを独自のtk mainloop
で生成することをお勧めしますか?
もっとエレガントな方法がありますか?
EDIT
私は現在App.__init__()
がToplevel()
を呼び出さずroot
にウィジェットを追加し、いくつかの点で、この機能を使用して新しいウィンドウで起動します
root = Tk()
app = App(root) # doesn't call Toplevel()
root.mainloop()
物事をこのようにやっている:
をdef new_window():
root = Tk()
window = App2(root) # doesn't call Toplevel() either
root
のnew_window()
は、元のroot
とは異なる変数であり、Tk()
の別の呼び出しによって取得されます。
これは右のことです。つまり、子ウィンドウは親から独立していて、両方が閉じられた後、Pythonプロセスが終了します。
私の質問は、それが意味をなさないのですか、私はここでひどく間違って何かしていますか?
私は今、 'tk.Tk()'で新しいルートを取得していますが、 'mainloop()'をもう一度呼び出すことはありません - これははるかに簡単ですが、 'Tk()'は同じマスターを返すシングルトンになると思うでしょうが、その上にウィジェットを作成しても最初のウィンドウには影響しないようです。 –
Btwはオリジナルの質問に私の編集を見る - 私はスレッドではないプロセスを意味した。 –
私はあなたの質問をよく理解していません。私が上に示したものよりはるかに簡単な方法です - 単にToplevelsを使用して 'root.withdraw()'を呼び出す - しかしあなたはすべてのToplevelを閉じることができ、プログラムはバックグラウンドで実行されます。あなたはゾンビプロセスをそうした方法で蓄積します。上記のrigmaroleの目的は、最後のToplevelが閉じられたときにプログラムを終了させることです。あなたの質問に答えることができない場合は、あなたのコードを投稿してください。 – unutbu