How to open more windows in tkinter

https://github.com/formazione/tkinter_tutorial.git (examples with tkinter)

I made some changes to this code I’ve already made some times ago, hoping it’s better.

Now the buttons got an image as background to make them nicer (maybe)
import tkinter as tk


class Win1:
    def __init__(self, master):
        self.master = master
        self.master.geometry("400x300")
        self.master.title("Window n.1")
        self.show_widgets()

    def show_widgets(self):
        self.frame = tk.Frame(self.master)
        self.img1, self.button1 = self.create_button("Window 2",
            lambda: self.new_window(Win2))
        self.img2, self.button2 = self.create_button("Window 3",
            lambda: self.new_window(Win3))
        self.img3, self.quit_button3 = self.create_button(
                        "Quit",
                        lambda: self.close_window())
        self.frame.pack()

    def create_button(self, text, command):
        ''' Button that creates a new window
        pass the text and the command
        " '''
        img = tk.PhotoImage(file="img/button_blue.png")
        img = img.subsample(2, 2)
        butt = tk.Button(
            self.frame,
            border=0,
            relief="ridge",
            compound=tk.CENTER,
            text=text,
            fg="white",
            font="Arial 12",
            command=command)
        butt.pack()
        butt.configure(image=img)
        return img, butt

    def new_window(self, _class):
            global win2, win3

            try:
                if _class == Win2:
                    if win2.state() == "normal":
                        win2.focus()
            except:  
                win2 = tk.Toplevel(self.master)
                _class(win2)

            try:
                if _class == Win3:
                    if win3.state() == "normal":
                        win3.focus()
            except:  
                win3 = tk.Toplevel(self.master)
                _class(win3)

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

class Win2(Win1):

    def __init__(self, master):
        super().__init__(master)
        self.master.title("Window 2")

    def show_widgets(self):
        ''' A frame with a button to quit the window '''
        self.frame = tk.Frame(self.master)
        self.frame.pack()

        # Button 1
        self.img1, self.button2 = self.create_button(
                                "Open window 3",
                                lambda: self.new_window(Win3))

        # Button 2
        self.img2, self.quit_button = self.create_button(
                                "Quit",
                                lambda: self.close_window())



class Win3(Win2):
    
    def __init__(self, master):
        super().__init__(master)
        self.master.title("Window 3")

    def show_widgets(self):
        self.frame = tk.Frame(self.master)
        self.img1, self.quit_button = self.create_button(
                                    "Quit",
                                    command=self.close_window)
        self.label = tk.Label(
            self.frame, text="THIS IS ONLY IN THE THIRD WINDOW")
        self.label.pack()
        self.frame.pack()



root = tk.Tk()
app = Win1(root)
root.mainloop()

Subscribe to the newsletter for updates
Tkinter templates
Avatar My youtube channel

Twitter: @pythonprogrammi - python_pygame

Videos

Speech recognition game

Pygame's Platform Game

Other Pygame's posts

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.