Create Dropdown Menu in Tkinter

Jinku Hu Dec 10, 2020 Mar 18, 2019 Tkinter Tkinter Dropdown Menu
  1. Tkinter OptionMenu Example
  2. Bind Command to OptionMenu When Value Changes
Create Dropdown Menu in Tkinter

It has some methods to create a dropdown menu in Tkinter.

  1. Use Combobox as introduced in the Tkinter tutorial Combobox chapter.
  2. Use OptionMenu Widget.

The OptionMenu is similar to the Combobox widget but is already included in the Tkinter itself; therefore, you don’t need to import ttk module like in the case of Combobox.

We will introduce how to create a dropdown menu with the OptionMenu widget in this article.

Tkinter OptionMenu Example

import tkinter as tk

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = tk.Tk()

app.geometry('100x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack()

app.mainloop()

Tkinter OptionMenu Example

opt = tk.OptionMenu(app, variable, *OptionList)

app is the parent of the created option menu,

variable is the initial text variable that has tk.StringVar type.

*OptionList is the other menu options. * is used for unpacking the container as list type here.

Bind Command to OptionMenu When Value Changes

OptionMenu couldn’t link a command when a new value is selected from the option list. You couldn’t simply link a callback function to it like button widget

tk.Button(app, text="Increase", width=30, command=change_label_number)

You need to use a trace method to attach observer callbacks to the OptionMenu variable. Every time the variable changes, it triggers the callback functions.

OptionMenu Callback Example

import tkinter as tk

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = tk.Tk()

app.geometry('100x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack(side="top")


labelTest = tk.Label(text="", font=('Helvetica', 12), fg='red')
labelTest.pack(side="top")

def callback(*args):
    labelTest.configure(text="The selected item is {}".format(variable.get()))

variable.trace("w", callback)

app.mainloop()

The trace observer has three modes,

observer mode Explanation
w when variable is written by someone
r when variable is read by someone
u when variable is deleted

Then variable.trace("w", callback) means it will call callback function when variable is written or selected by the user.

Tkinter OptionMenu Callback

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn