Создать глобальную переменную top = None
. Когда вы создаете Toplevel()
, сначала проверьте, является ли top
None
. Когда это не None
, тогда не создавайте окно. Когда вы нажимаете кнопку, чтобы уничтожить окно, вы должны запустить функцию, которая установит его обратно top = None
. Вы должны сделать это также, когда вы закрываете окно с помощью кнопки [X]
И вы можете использовать top.after(3000, ping_destroy)
, чтобы закрыть окно через 3000 мс (3 с)
import tkinter as tk
# --- functions ---
def ping_destroy():
global top
if top is not None:
top.destroy()
top = None
def ping_click():
global top
if top is None:
#os.system('-c -H ' + tkvar1.get() + ' -B ' + tkvar2.get() + ' -L ' + tkvar3.get() + ' -V ' + tkvar4.get() + ' -T log.log')
top = tk.Toplevel()
top.title("Ping")
msg = tk.Message(top, text="Notice")
msg.pack()
button = tk.Button(top, text="Dismiss", command=ping_destroy)
button.pack()
top.wm_protocol('WM_DELETE_WINDOW', ping_destroy) # run `ping_destroy` when use button [X]
top.after(3000, ping_destroy) # close after 3000ms (3s)
# --- main ---
top = None
root = tk.Tk()
button = tk.Button(root, text='Ping', command=ping_click)
button.pack()
root.mainloop()