

Tkinterの `Toplevel()`
ではメインウィンドウを親としたサブウィンドウを作成できますが、サブウィンドウを親としたサブウィンドウを作成することはできないのでしょうか？何か方法があれば教えていただきたいです。


CC BY-SA 4.0
2022-01-24T16:10:11.137
85910
2022-01-25T05:59:31.550
2022-01-24T16:51:45.967
3060
51078
question
python tkinter
Tkinter の Toplevel() で、サブウィンドウを親としたサブウィンドウは作成可能か


`Toplevel`には親ウィンドウを指定する`master`引数があります。  
これを使用することでサブウィンドウを親としたサブウィンドウを作成することができます。

**サンプルコード**

[code]

    from tkinter import * 
    from tkinter import ttk
    
    w1 = Tk()
    w1.geometry("240x64+100+100")
    ttk.Label(w1, text="親を閉じると子も孫も閉じます").grid(row=0, column=0)
    
    # 親ウィンドウに w1 を指定
    w2 = Toplevel(master=w1)
    w2.geometry("240x64+100+200")
    ttk.Label(w2, text="子を閉じると孫が閉じます").grid(row=0, column=0)
    
    # 親ウィンドウに w2 を指定
    w3 = Toplevel(master=w2)
    w3.geometry("240x64+100+300")
    ttk.Label(w3, text="孫を閉じるとは孫が閉じるということです").grid(row=0, column=0)
    
    w1.mainloop()
    
[/code]

(コメントを受けて追記)

下記のコードを使うと子ウィンドウのボタンで孫ウィンドウを呼び出すことができます。

[code]

    from tkinter import * 
    from tkinter import ttk
    from functools import partial
    
    w1 = Tk()
    w1.geometry("240x64+100+100")
    ttk.Label(w1, text="親を閉じると子も孫も閉じます").grid(row=0, column=0)
    
    # ボタンを押すと子が増える関数
    def call_child(w_master: Misc):
        # 親ウィンドウに w2 を指定
        w_child = Toplevel(master=w_master)
        w_child.geometry("240x64")
        ttk.Button(w_child, text="Call child.", command=partial(call_child, w_child)).grid(row=0, column=0)
    
    # 親ウィンドウに w1 を指定
    w2 = Toplevel(master=w1)
    w2.geometry("240x64+100+200")
    ttk.Label(w2, text="子を閉じると孫が閉じます").grid(row=0, column=0)
    ttk.Button(w2, text="Call child.", command=partial(call_child, w2)).grid(row=1, column=0)
    
    # 親ウィンドウに w2 を指定
    w3 = Toplevel(master=w2)
    w3.geometry("240x64+100+300")
    ttk.Label(w3, text="孫を閉じるとは孫が閉じるということです").grid(row=0, column=0)
    
    w1.mainloop()
    
[/code]


CC BY-SA 4.0
2022-01-25T01:39:27.103
85913
2022-01-25T05:59:31.550
2022-01-25T05:59:31.550
9820
9820
85910
answer