🌊

Python 親ウィンドウ非表示

2024/02/28に公開
import tkinter

# 子ウィンドウ
class ChildWindow:
    def __init__(self, parent):
        self.parent = parent
        self.window = None
        self.radio_1 = None
        self.radio_2 = None
        self.var = tkinter.IntVar()  # チェック有無変数

    def init(self):
        if not self.window:
            self.window = tkinter.Toplevel(self.parent)

        self.var.set(1)  # value=0のラジオボタンにチェックを入れる
        # ラジオボタン作成
        self.radio_1 = tkinter.Radiobutton(self.window, value=0, variable=self.var, text="幅32")
        self.radio_1.place(x=10, y=10)
        self.radio_2 = tkinter.Radiobutton(self.window, value=1, variable=self.var, text="幅140")
        self.radio_2.place(x=60, y=10)

        # ×ボタンの処理をカスタマイズする
        self.window.protocol('WM_DELETE_WINDOW', self.this_window_close)
	
	# 親ウィンドウ非表示
	self.GetParent().withdraw()

        self.window.mainloop()

    def this_window_close(self):
    
        #子ウィンドウ非表示
        self.window.withdraw()
	
	#親ウィンドウ表示
	self.GetParent().deiconify()
	
        # 子ウィンドウのオブジェクト解放。↓これをしないと、子ウィンドウを閉じた後に、再度開くことが出来なくなる。
        self.window = None
        return "break"


# 親ウィンドウ
class ParentWindow:
    def __init__(self):
        self.root = tkinter.Tk()
        self.sub_root = ChildWindow(self.root)
        self.sub_root_failure = None

        self.root.geometry(str(320) + "x" + str(200) + "+" + str(200) + "+" + str(200))

        self.btn_parent.place(x=10, y=10, width=300, height=25)
	
	# 1つだけ子ウィンドウを生成する
        self.btn_child = tkinter.Button(text="子ウィンドウ表示", command=self.sub_root.init)
        self.btn_child.place(x=10, y=50, width=300, height=25)

        #イベント待機
	self.root.mainloop()

def main():
    ParentWindow()

if __name__ == "__main__":
    main()
    

Discussion