Tkinter example code for multiple windows, why won't buttons load correctly?

class, destroy, python, tkinter

Solution

I rewrote your code in a more organized, better-practiced way:

import tkinter as tk

class Demo1:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.button1 = tk.Button(self.frame, text = 'New Window', width = 25, command = self.new_window)
        self.button1.pack()
        self.frame.pack()

    def new_window(self):
        self.newWindow = tk.Toplevel(self.master)
        self.app = Demo2(self.newWindow)

class Demo2:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows)
        self.quitButton.pack()
        self.frame.pack()

    def close_windows(self):
        self.master.destroy()

def main(): 
    root = tk.Tk()
    app = Demo1(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Result:

Problem

I am writing a program which should: - Open a window with the press of a button. - Close the newly opened window with the press of another button. I'm using classes so I can insert the code into a larger program later. However, I can't get my buttons to load correctly. ``` import tkinter as tk class Demo1(tk.Frame): def __init__(self): tk.Frame.__init__(self) self.pack() self.master.title("Demo 1") self.button1 = tk.Button(self, text = "Button 1", width = 25, command = self.new_window) self.button1.grid(row = 0, column = 1, columnspan = 2, sticky = tk.W+tk.E+tk.N+tk.S) def new_window(self): self.newWindow = Demo2() class Demo2(tk.Frame): def __init__(self): new = tk.Frame.__init__(self) new = tk.Toplevel(self) new.title("Demo 2") new.button = tk.Button(text = "Button 2", width = 25, command = self.close_window) new.button.pack() def close_window(self): self.destroy() def main(): Demo1().mainloop() if __name__ == '__main__': main() ```

Original source