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.