こんな感じの実装になります。
Python
1import tkinter as tk
2
3root = tk.Tk()
4
5def create_sub_window():
6 global button, sub
7 button.config(state='disable')
8 sub = tk.Toplevel(root)
9 sub.protocol('WM_DELETE_WINDOW', on_closing_sub_window)
10
11def on_closing_sub_window():
12 global button, sub
13 sub.destroy()
14 sub = None
15 button.config(state='normal')
16
17button = tk.Button(root, text='SUB_WINDOW', command=create_sub_window)
18button.pack()
19root.mainloop()
【補足】
SubWindowの実装を別ファイルにした場合の実装例
main.py
Python
1import tkinter as tk
2import sub
3
4root = tk.Tk()
5
6def callback1(event):
7 if event.widget["state"] == "disabled":
8 return "break"
9 else:
10 event.widget["state"] = "disabled":
11 # SubWindowを開く
12 # 第1引数:SubWindowのowner/第2引数:SubWindowが閉じられたとき呼ばれる関数
13 sub.create_sub_window(root, lambda : Button1.config(state='normal'))
14
15Button1 = tk.Button(root, text='SUB_WINDOW')
16Button1.pack()
17Button1.bind('<Button-1>', callback1)
18root.mainloop()
sub.py
import tkinter as tk
sub = None
def close_sub_window(on_destroy=None):
global sub
# 閉じたとき呼ばれる関数が設定されていたらCALLする
if on_destroy is not None:
on_destroy()
# SubWindowを閉じる
sub.destroy()
sub = None
def create_sub_window(owner, on_destroy=None):
global sub
# 既にSubWindowが開いていないかをチェック
if sub is not None:
return
sub = tk.Toplevel(owner)
sub.protocol('WM_DELETE_WINDOW', lambda: close_sub_window(on_destroy))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/03 14:24
2019/10/03 15:37
2019/10/03 23:15
2019/10/03 23:21
2019/10/04 08:41
2019/10/04 08:41
2019/10/05 02:35
2019/10/07 02:35
2019/10/12 09:17