Try this:
import tkinter as tk
last_user_input_entry = ""
last_user_input_button = 0
def on_closing():
global entry, top, last_user_input_entry, last_user_input_button, button_var
text = entry.get()
last_user_input_entry = text
last_user_input_button = button_var.get()
print("The text entered =", last_user_input_entry)
print("Checkbutton state =", last_user_input_button)
top.destroy()
def start_top():
global entry, top, button_var
top = tk.Toplevel(root)
top.protocol("WM_DELETE_WINDOW", on_closing)
entry = tk.Entry(top)
entry.pack()
entry.insert("end", last_user_input_entry)
button_var = tk.IntVar()
button_var.set(last_user_input_button)
button = tk.Checkbutton(top, variable=button_var)
button.pack()
root = tk.Tk()
button = tk.Button(root, text="Open toplevel", command=start_top)
button.pack()
root.mainloop()
Basically we intercept the window closing and handle that our self. We also have a variable that stored the last user input and we put it in the tkinter.Entry
after we create it.