Overview
CTkOptionMenu is a dropdown menu widget that displays a selected value and opens a menu of options when clicked. It’s similar to a combobox but does not allow text input.
Constructor
CTkOptionMenu(
master,
width=140,
height=28,
corner_radius=None,
bg_color="transparent",
fg_color=None,
button_color=None,
button_hover_color=None,
text_color=None,
text_color_disabled=None,
dropdown_fg_color=None,
dropdown_hover_color=None,
dropdown_text_color=None,
font=None,
dropdown_font=None,
values=None,
variable=None,
state=tkinter.NORMAL,
hover=True,
command=None,
dynamic_resizing=True,
anchor="w",
**kwargs
)
Parameters
Width of the option menu in pixels
Height of the option menu in pixels
corner_radius
Optional[int]
default:"None"
Corner radius in pixels. If None, uses theme default
bg_color
Union[str, Tuple[str, str]]
default:"'transparent'"
Background color behind the widget
fg_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Foreground color of the main button area. If None, uses theme default
button_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Color of the dropdown arrow button area. If None, uses theme default
button_hover_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Button color when hovering. If None, uses theme default
text_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Color of the displayed text. If None, uses theme default
text_color_disabled
Optional[Union[str, Tuple[str, str]]]
default:"None"
Text color when disabled. If None, uses theme default
dropdown_fg_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Background color of the dropdown menu. If None, uses theme default
dropdown_hover_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Hover color for dropdown menu items. If None, uses theme default
dropdown_text_color
Optional[Union[str, Tuple[str, str]]]
default:"None"
Text color for dropdown menu items. If None, uses theme default
font
Optional[Union[tuple, CTkFont]]
default:"None"
Font for the displayed text
dropdown_font
Optional[Union[tuple, CTkFont]]
default:"None"
Font for the dropdown menu items
values
Optional[list]
default:"None"
List of string values to display in the dropdown. If None, defaults to [“CTkOptionMenu”]
variable
Union[tkinter.Variable, None]
default:"None"
Tkinter variable (StringVar) to link with the selected value
state
str
default:"tkinter.NORMAL"
State of the widget: tkinter.NORMAL or tkinter.DISABLED
Enable/disable hover effect
command
Union[Callable[[str], Any], None]
default:"None"
Callback function called when an option is selected. Receives the selected value as argument
If True, widget resizes to fit content. If False, uses fixed width
Text anchor position: “w” (left), “center”, or “e” (right)
Methods
get()
Returns the currently selected value.
selected = optionmenu.get()
Returns: str - The currently selected value
set()
Sets the displayed value.
optionmenu.set("Option 2")
Parameters:
value (str): Value to display and set
Configures widget parameters.
optionmenu.configure(values=["New1", "New2"], fg_color="blue")
cget()
Returns the value of a configuration parameter.
values = optionmenu.cget("values")
Usage Examples
import customtkinter as ctk
root = ctk.CTk()
optionmenu = ctk.CTkOptionMenu(
root,
values=["Option 1", "Option 2", "Option 3"]
)
optionmenu.pack(pady=20, padx=20)
root.mainloop()
OptionMenu with Command
def on_option_selected(choice):
print(f"Selected: {choice}")
label.configure(text=f"You selected: {choice}")
optionmenu = ctk.CTkOptionMenu(
root,
values=["Python", "JavaScript", "Java", "C++"],
command=on_option_selected
)
optionmenu.pack(pady=20)
optionmenu.set("Python") # Set initial value
label = ctk.CTkLabel(root, text="You selected: Python")
label.pack()
Using with Variable
import tkinter as tk
language_var = tk.StringVar(value="Python")
optionmenu = ctk.CTkOptionMenu(
root,
values=["Python", "JavaScript", "Java", "C++"],
variable=language_var
)
optionmenu.pack(pady=20)
# Access value through variable
def get_selection():
print(f"Selected language: {language_var.get()}")
btn = ctk.CTkButton(root, text="Get Selection", command=get_selection)
btn.pack()
Getting and Setting Values
optionmenu = ctk.CTkOptionMenu(
root,
values=["Small", "Medium", "Large"]
)
optionmenu.pack(pady=20)
# Set to specific value
optionmenu.set("Large")
# Get current value
def show_current():
current = optionmenu.get()
print(f"Current selection: {current}")
show_btn = ctk.CTkButton(root, text="Show Current", command=show_current)
show_btn.pack()
Dynamically Updating Values
optionmenu = ctk.CTkOptionMenu(
root,
values=["Item 1", "Item 2"]
)
optionmenu.pack(pady=20)
def add_option():
current_values = optionmenu.cget("values")
new_values = current_values + [f"Item {len(current_values) + 1}"]
optionmenu.configure(values=new_values)
add_btn = ctk.CTkButton(root, text="Add Option", command=add_option)
add_btn.pack()
optionmenu = ctk.CTkOptionMenu(
root,
values=["Option 1", "Option 2", "Option 3"],
width=200,
height=35,
corner_radius=10,
fg_color="#2c3e50",
button_color="#3498db",
button_hover_color="#2980b9",
text_color="white",
dropdown_fg_color="#34495e",
dropdown_hover_color="#3498db",
dropdown_text_color="white",
font=("Helvetica", 14),
dropdown_font=("Helvetica", 12)
)
optionmenu.pack(pady=20, padx=20)
Theme Selector
def change_theme(theme):
print(f"Changing theme to: {theme}")
if theme == "Dark":
ctk.set_appearance_mode("dark")
elif theme == "Light":
ctk.set_appearance_mode("light")
else:
ctk.set_appearance_mode("system")
theme_menu = ctk.CTkOptionMenu(
root,
values=["System", "Light", "Dark"],
command=change_theme
)
theme_menu.pack(pady=20)
theme_menu.set("System")
optionmenu = ctk.CTkOptionMenu(
root,
values=["Short", "Medium Length", "Very Long Option Name"],
width=250,
dynamic_resizing=False # Fixed width
)
optionmenu.pack(pady=20, padx=20)
optionmenu = ctk.CTkOptionMenu(
root,
values=["Left", "Center", "Right"],
anchor="center"
)
optionmenu.pack(pady=20, padx=20)
Country Selector
countries = [
"United States",
"United Kingdom",
"Canada",
"Australia",
"Germany",
"France"
]
def on_country_selected(country):
print(f"Selected country: {country}")
country_menu = ctk.CTkOptionMenu(
root,
values=countries,
command=on_country_selected,
width=200
)
country_menu.pack(pady=20)
country_menu.set("United States")
optionmenu = ctk.CTkOptionMenu(
root,
values=["Option 1", "Option 2"],
state=ctk.DISABLED
)
optionmenu.set("Option 1")
optionmenu.pack(pady=20)