I was wondering if there was a way to open a new instance of Toplevel() and close the current one via the press of a button, i.e. close the current window and open a new one. Here is the code in question:
def start(self):
self.name = tk.DoubleVar()
name_w = tk.Toplevel(root)
name_w.wm_title("Enter name")
f1 = tk.Frame(name_w)
f1.pack()
L1 = tk.Label(f1, text="Please enter your name!")
L1.grid(row=0, column=0)
E1 = tk.Entry(f1, textvariable=self.name)
E1.grid(row=1, column=0)
N1 = tk.Button(f1, text="Next", command = self.Q1)
N1.grid(row=2, column=0)
In this case, I want self.Q1 to be called, while also destroying name_w. Is there anyway to do this? Thanks.
Yes, it's possible. To close an instance of Toplevel
simply destroy it. You'll need to save a reference to the window. In your case I would either have Q1
destroy the window, or make a separate function that calls Q1
and then destroys the window. It all depends on what the main purpose of Q1
is.
For example:
def start(self):
...
self.new_window = name_w
...
def quit_window(self):
self.Q1()
self.new_window.destroy()
If you have multiple of these you might need to store the window references in a list or dictionary, but the basic mechanism is the same: use .destroy()
to destroy the window.
This isn't the only way, of course. You could use lambda or functools.partial
and a function that accepts the name of the window to destroy, or you could use nested functions, etc.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With