Open a new Window with a button in Python-Tkinter

Python provides a variety of GUI (Graphic User Interface) such as PyQt, Tkinter, Kivy and soon. Among them, tkinter is the most commonly used GUI module in Python since it is simple and easy to learn and implement as well. The word Tkinter comes from the tk interface. The tkinter module is available in Python standard library.

Note: For more information, refer to Python GUI – tkinter

Installation

For Ubuntu, you have to install tkinter module by writing following command:

sudo apt-get install python-tk

When a Tkinter program runs, it runs a mainloop (an infinite loop) which is responsible for running a GUI program. At a time only one instance of mainloop can be active, so in order to open a new window we have to use a widget, Toplevel.



A Toplevel widget works pretty much like a Frame, but it opens in a separate top-level window, such windows have all the properties that a main window (root/master window) should have.

To open a new window with a button, we will use events.

Exmaple 1:

filter_none

edit
close

play_arrow

link
brightness_4
code

# This will import all the widgets
# and modules which are available in
# tkinter and ttk module
from tkinter import * 
from tkinter.ttk import *
  
# creates a Tk() object
master = Tk()
  
# sets the geometry of main 
# root window
master.geometry("200x200")
  
  
# function to open a new window 
# on a button click
def openNewWindow():
      
    # Toplevel object which will 
    # be treated as a new window
    newWindow = Toplevel(master)
  
    # sets the title of the
    # Toplevel widget
    newWindow.title("New Window")
  
    # sets the geometry of toplevel
    newWindow.geometry("200x200")
  
    # A Label widget to show in toplevel
    Label(newWindow, 
          text ="This is a new window").pack()
  
  
label = Label(master, 
              text ="This is the main window")
  
label.pack(pady = 10)
  
# a button widget which will open a 
# new window on button click
btn = Button(master, 
             text ="Click to open a new window"
             command = openNewWindow)
btn.pack(pady = 10)
  
# mainloop, runs infinitely
mainloop()

chevron_right


Output:

Example 2: This will be a class based approach, in this we will create a class which will derive Toplevel widget class and will behave like a toplevel. This method will be useful when you want to add some other properties to an existing Toplevel widget class.
Every object of this class will be a Toplevel widget. We will also use bind() method to register click event.

filter_none

edit
close

play_arrow

link
brightness_4
code

# This will import all the widgets
# and modules which are available in
# tkinter and ttk module
from tkinter import * 
from tkinter.ttk import *
  
  
class NewWindow(Toplevel):
      
    def __init__(self, master = None):
          
        super().__init__(master = master)
        self.title("New Window")
        self.geometry("200x200")
        label = Label(self, text ="This is a new Window")
        label.pack()
  
  
# creates a Tk() object
master = Tk()
  
# sets the geometry of 
# main root window
master.geometry("200x200")
  
label = Label(master, text ="This is the main window")
label.pack(side = TOP, pady = 10)
  
# a button widget which will
# open a new window on button click
btn = Button(master, 
             text ="Click to open a new window")
  
# Following line will bind click event
# On any click left / right button
# of mouse a new window will be opened
btn.bind("<Button>"
         lambda e: NewWindow(master))
  
btn.pack(pady = 10)
  
# mainloop, runs infinitely
mainloop()

chevron_right


Output:




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.