Dependent Drop Downs and List Boxes – Python Tkinter GUI Tutorial #152

In this video I’ll show you how to create dependent drop downs, combo boxes, and list boxes for Tkinter.

A Dependent dropdown or listbox is one that changes based on what you clicked in the previous box.

In our example, we’ll create a sizes dropdown that has small, medium, and large sizes. When you click on one of them, a second list appears with the colors (red, green, blue, black) that are available for each size.

Python Code: ddrops.py
(Github Code)

from tkinter import *
from tkinter import ttk

root = Tk()
root.title('Codemy.com - Dependent Dropdowns')
root.iconbitmap('c:/gui/codemy.ico')
root.geometry("500x400")

# Creating a list of sizes
sizes = [
	"Small",
	"Medium",
	"Large"
]

# Create a list of colors
small_colors = [
	"Red",
	"Green",
	"Blue",
	"Black"
]

medium_colors = [
	"Red",
	"Green"
]

large_colors = [
	"Blue",
	"Black"
]

def pick_color(e):
	if my_combo.get() == "Small":
		color_combo.config(value=small_colors)
		color_combo.current(0)
	if my_combo.get() == "Medium":
		color_combo.config(value=medium_colors)
		color_combo.current(0)
	if my_combo.get() == "Large":
		color_combo.config(value=large_colors)
		color_combo.current(0)

# Create a drop box
my_combo = ttk.Combobox(root, value=sizes)
my_combo.current(0)
my_combo.pack(pady=20)
# bind the combobox
my_combo.bind("<>", pick_color)

# Color Combo box
color_combo = ttk.Combobox(root, value=[" "])
color_combo.current(0)
color_combo.pack(pady=20)

# Frame
my_frame = Frame(root)
my_frame.pack(pady=50)

# List boxes
my_list1 = Listbox(my_frame)
my_list2 = Listbox(my_frame)
my_list1.grid(row=0, column=0)
my_list2.grid(row=0, column=1, padx=20)

def list_color(e):
	my_list2.delete(0, END)
	if my_list1.get(ANCHOR) == "Small":
		for item in small_colors:
			my_list2.insert(END, item)
	if my_list1.get(ANCHOR) == "Medium":
		for item in medium_colors:
			my_list2.insert(END, item)
	if my_list1.get(ANCHOR) == "Large":
		for item in large_colors:
			my_list2.insert(END, item)

# add items to list1
for item in sizes:
	my_list1.insert(END, item)

# Bind The Listbox
my_list1.bind("<>", list_color)

root.mainloop()

John Elder

John is the CEO of Codemy.com where he teaches over 100,000 students how to code! He founded one of the Internet's earliest advertising networks and sold it to a publicly company at the height of the first dot com boom. After that he developed the award-winning Submission-Spider search engine submission software that's been used by over 3 million individuals, businesses, and governments in over 42 countries. He's written several Amazon #1 best selling books on coding, and runs a popular Youtube coding channel.

View all posts

Add comment

John Elder

John is the CEO of Codemy.com where he teaches over 100,000 students how to code! He founded one of the Internet's earliest advertising networks and sold it to a publicly company at the height of...