Skip to content

Creating a button in Tkinter

Creating a button in Tkinter

In this article, we will explore how to create a simple button in Tkinter. The button is used for a lot of user interaction and is often the most basic way to interact with a user. We will also cover some basics of how a Tkinter application is launched.

Setting up

After importing Tkinter we first create an application class from tk.Tk.  The super method inherits from the Tk class's init method. Note that we also passed an argument in the init method named button_text. The label of the button will have this text on it.

Creating the button

The init method also puts the button on the frame. Notice that the button will not be visible until we pack it or place it on the frame. The tk.Button creates the button. It accepts input such as text which defines what text the button should have. You can also create the button disabled by passing in the variable state="disabled" (use lower letter characters).  You can enable the button with "active". The button can also be created in distinct reliefs. The reliefs are tk.GROOVE, tk.FLAT, tk.RIDGE. The normal state is TK.RAISED. When you push the button is shown in the state tk.SUNKEN.

Button up!

You can also pass an image to the button. Just create a button with tk.PhotoImage as below:

self.button_button_image = tk.PhotoImage(file="your_button_picture.png")

Then pass it with the variable image:

tk.Button(self, image = self.button_button_image, command=self.print_txt)

Finishing up

What we do next is creating a method for the button, which we call when we press the button. Next, we create a root frame and pass the text "My button" to label our button. We run the application with the mainloop method.

#! python3

# -*- coding: utf-8 -*-

import tkinter as tk

class button_tester_app(tk.Tk):
def __init__(self, button_text):
super().__init__()
self._button_text = button_text
# Create the button
self.test_button = tk.Button(self, text = button_text, command=self.print_text)
# Put the button to the frame
self.test_button.pack()

def print_text(self):
# Print the text to the console
print("You pressed the \"{}\" test button!".format(self._button_text))

if __name__ == "__main__":
root = button_tester_app("My button")
root.mainloop()