Create Radiobuttons & Checkbuttons In Tkinter

Add special button widgets to your Tkinter GUI

Tkinter Tutorial Getting started with TKinter

Heads up! You've already completed this tutorial.

Today's tutorial is going to focus on two commonly used Tkinter widgets -- Checkbutton and Radiobutton. Buttons can be seen everywhere in GUI applications. They are useful for allowing users to interact with an application, creating options and choices for a user to select. In a previous tutorial we took a look at using the Tkinter Button widget.

Food order GUI displaying Tkinter radiobutton and checkbutton widgets. GUI showing Checkbutton and Radiobutton widgets in Tkinter.

Creating Checkbutton Widgets

Checkbuttons are a very commonly used widget. They are great whenever a user needs to select multiple items in the GUI window, or when you need to control a feature of an application, switching it on and off with the checkbutton. This functionality is useful when you want to enable/disable features such as showing or hiding a toolbar.

Checkbutton widgets can also be used to call Python methods or custom-made functions using the command argument. Every checkbutton needs to have a corresponding variable associated with it. Control variables created using the variable classes -- IntVarDoubleVarBooleanVar, and StringVar -- can be used to keep track of changes to Tkinter widgets.

Let's take a look at a small snippet of code that sets up a Checkbutton.

python
var = IntVar()  # variable class
item1 = Checkbutton(root, text="tuna fish",
        variable=var, command=selectItems)

item1.pack(anchor='w')

def selectItems():
    print(var.get())  # prints 1 or 0
    if  var.get():  # If the button is checked,
        print(item1['text'])  # Print print the cb's text

First, we create the integer variable, var, which is used to monitor the state of the checkbutton. Next, we create an instance of Checkbutton. For parameters, we set its root parent widget, the text, the variable associated with the widget, and the function it will call when the user interacts with it. Lastly, we use pack() to arrange the widget in the window.

In the selectItems() method, we use get() to read the variable's current value. If you ever want to specify the value of a variable, then use the set() method.

Packaging Python Applications with PyInstaller by Martin Fitzpatrick — This step-by-step guide walks you through packaging your own Python applications from simple examples to complete installers and signed executables.

More info Get the book

Creating Radiobutton Widgets

Whereas the Checkbutton widget is useful for selecting a number of choices, the Radiobutton is generally used for picking one choice out of many. Radiobuttons can also be used to call Python functions when clicked on.

In order to achieve exclusivity among the radiobuttons in a group, they should share the same variable. This means that when one radiobutton in a group is selected any other selected widgets will be deselected. You can see this demonstrated in the bit of code below.

python
Label(root, text="Select your country of birth: ").pack(anchor='w')

var1 = StringVar(root, "USA")  # Create a variable for strings, and initialize the variable
Radiobutton(root, text="USA", variable=var1, value="USA", command=printResults).pack(anchor='w')
Radiobutton(root, text="France", variable=var1, value="France", command=printResults).pack(anchor='w')
Radiobutton(root, text="Germany", variable=var1, value="Germany", command=printResults).pack(anchor='w')
Radiobutton(root, text="China", variable=var1, value="China", command=printResults).pack(anchor='w')

def printResults():
    print(var1.get())

You can see how the radiobutton widgets look in the following image.

Example of Tkinter radiobutton widgets. Tkinter Radiobutton example.

The process for creating radiobuttons is similar to checkbuttons. One additional parameter we need to pass is the value associated with each individual radiobutton. If you have a bunch of radiobutton widgets you need to create, try using a for loop to instantiate them.

A Simple GUI Example

Now let's take a look at an example that combines the Checkbutton and Radiobutton widgets into a very simple food ordering GUI.

 We use Object-Oriented Programming (OOP) in the following program. If you are not familiar with OOP, please check out Python documnentation on using classes or other online tutorials to help get you started.

python
from tkinter import (Tk, ttk, Label, Frame, Button,
    Checkbutton, Radiobutton, IntVar, HORIZONTAL)

class  SimpleGUI(Tk):

    def __init__(self):
        super().__init__()
        self.initializeUI()

    def initializeUI(self):
        self.title("Food Order Form")
        self.minsize(300, 200)  # width, height
        self.geometry("400x350+50+50")
        self.setupWindow()

    def setupWindow(self):
        """ Set up the widgets."""
        title = Label(self, text="Food Order Form",
            font=('Helvetica', 20), bd=10)
        title.pack()

        line = ttk.Separator(self, orient=HORIZONTAL)
        line.pack(fill='x')

        order_label = Label(self, text="What would you like to order?", bd=10)
        order_label.pack(anchor='w')

        foods_list = ["Sandwich", "Salad", "Soup", "Pizza"]
        self.foods_dict = {}

        # Populate the dictionary with checkbutton widgets
        for  i, food_item in  enumerate(foods_list):

            # Set the text for each checkbutton
            self.foods_dict[food_item] = Checkbutton(self, text=food_item)

            # Create a new instance of IntVar() for each checkbutton
            self.foods_dict[food_item].var = IntVar()

            # Set the variable parameter of the checkbutton
            self.foods_dict[food_item]['variable'] = self.foods_dict[food_item].var

            # Arrange the checkbutton in the window
            self.foods_dict[food_item].pack(anchor='w')

        payment_label = Label(self, text="How do you want to pay?", bd=10)
        payment_label.pack(anchor='w')

        # Create integer variable
        self.var = IntVar()
        self.var.set(0)  # Use set() initialize the variable
        self.payment_methods = ["PayPal", "Credit Card", "Other"]

        for  i, method in  enumerate(self.payment_methods):
            self.pymt_method = Radiobutton(self, text=method, variable=self.var, value=i)
            self.pymt_method.pack(anchor='w')

        # Use ttk to add styling to button
        style = ttk.Style()
        style.configure('TButton', bg='skyblue', fg='white')

        # Create button that will call the method to display text and
        # close the program
        next_button = ttk.Button(self, text="Next", command=self.printResults)
        next_button.pack()

    def printResults(self):
        """Print the results of the checkboxes and radio buttons."""
        for  cb in  self.foods_dict.values():
            if  cb.var.get():
                print('Item selected: {}'.format(cb['text']))

        index = self.var.get()
        print("Payment method: {}".format(self.payment_methods[index]))
        self.quit()

if  __name__  ==  "__main__":
    app = SimpleGUI()
    app.mainloop()

The complete GUI can be seen in the image at the beginning of this tutorial.

Explanation

Start by importing the modules we need from tkinter. We need to create a class for our window, SimpleGUI, that inherits from Tk. Next, initialize the interface's parameters.

In the setupWindow() method, we set up the LabelCheckbutton, and Radiobutton widgets, and their respective variables. A for loop is used to create each checkbutton instance. Refer to the code for comments about how to set up the Checkbutton widgets. The next widgets we need to create are the radiobuttons. By sharing the var object, we create a mutually exclusive group of radiobuttons. Mutual exclusivity refers to the theory in probability that two or more events cannot occur at the same time. 

Finally, when the next_button is clicked, the printResults() method is called. This prints the text from selected checkbuttons and radiobutton and closes the program.

Tkinter radiobutton and checkbutton output. Output to the Terminal window.

Summary

In this tutorial we take a brief look at the Checkbutton and Radiobutton widgets. These two kinds of widgets are useful for allowing a user to select choices from a group of options. Checkbuttons are typically used when a user needs to be able to select multiple selections. Radiobuttons are best used when a user only needs to select one choice from many.

For more information about Tkinter or the Checkbutton and Radiobutton widgets, check out the Python documentation on Tkinter.

Create GUI Applications with Python & Qt6 by Martin Fitzpatrick — (PySide6 Edition) The hands-on guide to making apps with Python — Over 10,000 copies sold!

More info Get the book

Well done, you've finished this tutorial! Mark As Complete
[[ user.completed.length ]] completed [[ user.streak+1 ]] day streak

Create Radiobuttons & Checkbuttons In Tkinter was written by Joshua Willman .