Replace the old looking tkMenu and add this new scrollable dropdown menu to customtkinter optionmenu, combobox, entries, buttons etc...
Download the source code, paste the CTkScrollableDropdown
folder in the directory where your program is present.
Note: this type of dropdown was discontinued from ctk because of some tkinter OS-related bugs. But I have tried to fix them by experimenting with different window attributes. Current Status: Windows: ✅ Linux: ✅ Mac OS: ⚠️ (random crashes can happen, help wanted)
CTkScrollableDropdown(attach=widget_name, values=option_list)
from CTkScrollableDropdown import *
import customtkinter
root = customtkinter.CTk()
customtkinter.CTkLabel(root, text="Different Dropdown Styles").pack(pady=5)
# Some option list
values = ["python","tkinter","customtkinter","widgets",
"options","menu","combobox","dropdown","search"]
# Attach to OptionMenu
optionmenu = customtkinter.CTkOptionMenu(root, width=240)
optionmenu.pack(fill="x", padx=10, pady=10)
CTkScrollableDropdown(optionmenu, values=values)
# Attach to Combobox
combobox = customtkinter.CTkComboBox(root, width=240)
combobox.pack(fill="x", padx=10, pady=10)
CTkScrollableDropdown(combobox, values=values, justify="left", button_color="transparent")
# Attach to Entry
customtkinter.CTkLabel(root, text="Live Search Values").pack()
entry = customtkinter.CTkEntry(root, width=240)
entry.pack(fill="x", padx=10, pady=10)
CTkScrollableDropdown(entry, values=values, command=lambda e: entry.insert(1, e),
autocomplete=True) # Using autocomplete
# Attach to Button
button = customtkinter.CTkButton(root, text="choose options", width=240)
button.pack(fill="x", padx=10, pady=10)
CTkScrollableDropdown(button, values=values, height=270, resize=False, button_height=30,
scrollbar=False, command=lambda e: button.configure(text=e))
root.mainloop()
Parameter | Description |
---|---|
attach | parent widget to which the dropdown menu will be attached |
x | optional, change the horizontal offset of the widget manually |
y | optional, change the vertical offset of the widget manually |
width | optional, change the default width of the menu |
height | optional, change the default height of the menu |
values | add the list of options in the dropdown menu |
image_values | optional, add list of images in options |
fg_color | change the fg_color of the scrollable frame |
button_color | change the fg_color of the buttons/options |
hover_color | change the hover_color of the buttons/options |
text_color | change the text_color of the buttons/options |
button_height | change the height of the buttons if required |
autocomplete | add live search options for ctkcombobox or ctkentry widget |
alpha | change the transparency of the whole dropdown widget (range: 0-1) |
justify | change the anchor of the option text |
frame_corner_radius | adjust roundness of the frame corners |
double_click | bind double click for menu popup |
resize | resize the menu dynamically, default: True |
frame_border_width | change the border_width of the frame if required |
frame_border_color | change the border_color of the frame |
scrollbar | hide the scrollbar if required, default: True |
command | add the command when option is selected |
*Other Parameters | All other parameters for ctkbutton or scrollbar can be passed in dropdownmenu |
.insert(value="new_option", ...)
Add a new option to the list
.configure(values=new_values, height=500, ...)
Update some parameters for the dropdown
.live_update(string="option")
filter options dynamically
.destroy_popup()
Remove the dropdown completely
.popup(x, y)
Show popup menu manually
Note: if you are facing some issues then try using the CTkScrollableDropdownFrame
.