VOOZH about

URL: https://www.geeksforgeeks.org/python/open-a-new-window-with-a-button-in-python-tkinter/

⇱ Open a New Window with a Button in Python - Tkinter - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Open a New Window with a Button in Python - Tkinter

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

  • Toplevel is used to create a new independent window in a Tkinter application.
  • It acts like the main window, having its own title bar, minimize, maximize and close buttons.
  • It can be used for pop-ups, dialogs or additional windows in the application.

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:

Output:

Explanation:

  • Toplevel(master): Creates a new window that is independent of the main window.
  • new_window.title("New Window"): Sets the window title.
  • new_window.geometry("250x150"): Defines the size of the new window.
  • Label(...).pack(): Displays text inside the new window.
  • command=open_new_window: Calls the function when the button is clicked.

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:

Output:

Explanation:

1. Class-Based Window (NewWindow)

  • Inherits from Toplevel, so every instance behaves as a separate window.
  • Defines window properties like title, size and a label inside the window.

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

Comment
Article Tags: