Open a New Window with a Button in Python Tkinter (original) (raw)

Last Updated : 12 Jul, 2025

Tkinter is the most commonly used GUI (Graphical User Interface) library in Python. It is simple, easy to learn and comes built-in with Python. The name "Tkinter" comes from the **tk interface, which is the underlying toolkit it uses.

To create multiple windows in a Tkinter application, we use the Toplevel widget. It functions similarly to a Frame, but it opens in a separate window with properties like a title bar, minimize, maximize and close buttons, just like the main application window.

What is the Toplevel Widget

In this guide, we will explore how to open a new window when a button is clicked using two approaches:

  1. Using a function to create a new window
  2. Using a class-based approach for better modularity

Setting Up Tkinter

Tkinter comes **pre-installed with **Python. However, on some Linux distributions like **Ubuntu, we **may need to install it using:

sudo apt-get install python-tk

Creating a New Window Using a Function

This approach creates a new window when a button is clicked using the Toplevel widget. Here is the code:

Python `

from tkinter import * from tkinter.ttk import *

Create the main window

master = Tk() master.geometry("300x200") # Set window size master.title("Main Window")

Function to open a new window

def open_new_window(): new_window = Toplevel(master) # Create a new window new_window.title("New Window") new_window.geometry("250x150")

Label(new_window, text="This is a new window").pack(pady=20)

Create a label and a button to open the new window

Label(master, text="This is the main window").pack(pady=10) Button(master, text="Open New Window", command=open_new_window).pack(pady=10)

Run the Tkinter event loop

master.mainloop()

`

**Output:

**Explanation:

Using a Class-Based Approach

This approach creates a dedicated class for new windows, making the code more reusable and organized. Here is the code:

Python `

from tkinter import * from tkinter.ttk import *

Class for creating a new window

class NewWindow(Toplevel): def init(self, master=None): super().init(master) self.title("New Window") self.geometry("250x150")

    Label(self, text="This is a new window").pack(pady=20)

Create the main window

master = Tk() master.geometry("300x200") master.title("Main Window")

Label(master, text="This is the main window").pack(pady=10)

Create a button to open the new window using the class

btn = Button(master, text="Open New Window") btn.bind("", lambda e: NewWindow(master)) # Bind the event

btn.pack(pady=10)

Run the Tkinter event loop

master.mainloop()

`

**Output:

**Explanation:

**1. Class-Based Window (NewWindow)

**2. Binding Click Event (bind()): Instead of using **command=, we use ****.bind("", lambda e: NewWindow(master))**, meaning the button click event creates a new window.