Tkinter Combobox (original) (raw)
Summary: in this tutorial, you’ll learn to create a Tkinter combobox widget that allows users to select one value from a set of values.
A combobox is a combination of an Entry widget and a Listbox widget. A combobox widget allows you to select one value in a set of values. In addition, it allows you to enter a custom value.
Create a combobox #
To create a combobox widget, you’ll use the ttk.Combobox()
constructor. The following example creates a combobox widget and links it to a string variable:
current_var = tk.StringVar() combobox = ttk.Combobox(container, textvariable=current_var)
Code language: Python (python)
The container
is the window or frame on which you want to place the combobox widget.
The textvariable
argument links a variable current_var
to the current value of the combobox.
To get the currently selected value, you can use the current_var variable:
current_value = current_var.get()
Code language: Python (python)
Alternatively, you can use the get()
method of the combobox object:
current_value = combobox.get()
Code language: Python (python)
To set the current value, you use the current_var variable or the set()
method of the combobox object:
current_value.set(new_value) combobox.set(new_value)
Code language: Python (python)
Define value list #
The combobox has the values
property that you can assign a list of values to it like this:
combobox['values'] = ('value1', 'value2', 'value3')
Code language: Python (python)
By default, you can enter a custom value in the combobox. If you don’t want this, you can set the state
option to 'readonly'
:
combobox['state'] = 'readonly'
Code language: Python (python)
To re-enable editing the combobox, you use the 'normal'
state like this:
combobox['state'] = 'normal'
Code language: Python (python)
Bind events #
When a select value changes, the combobox widget generates a '<<ComboboxSelected>>'
virtual event. To handle the event, you can use the bind() method like this:
combobox.bind('<<ComboboxSelected>>', callback)
Code language: Python (python)
In this example, the callback function will execute when the selected value of the combobox changes.
Set the current value #
To set the current value, you use the set()
method:
combobox.set(self, value)
Code language: Python (python)
Also, you can use the current()
method:
current(self, newindex=None)
Code language: Python (python)
The newindex
specifies the index of values from the list that you want to select as the current value.
If you don’t specify the newindex
, the current()
method will return the index of the current value in the list of values or -1
if the current value doesn’t appear in the list.
Python Tkinter combobox example #
The following program illustrates how to create a combobox widget:
`import tkinter as tk from tkinter import ttk from tkinter.messagebox import showinfo from calendar import month_name
root = tk.Tk()
config the root window
root.geometry('300x200') root.resizable(False, False) root.title('Combobox Widget')
label
label = ttk.Label(text="Please select a month:") label.pack(fill=tk.X, padx=5, pady=5)
create a combobox
selected_month = tk.StringVar() month_cb = ttk.Combobox(root, textvariable=selected_month)
get first 3 letters of every month name
month_cb['values'] = [month_name[m][0:3] for m in range(1, 13)]
prevent typing a value
month_cb['state'] = 'readonly'
place the widget
month_cb.pack(fill=tk.X, padx=5, pady=5)
bind the selected value changes
def month_changed(event): """ handle the month changed event """ showinfo( title='Result', message=f'You selected {selected_month.get()}!' )
month_cb.bind('<>', month_changed)
root.mainloop()`Code language: Python (python)
Output:
The following program shows the same month combobox widget and uses the set() method to set the current value to the current month:
`import tkinter as tk from tkinter import ttk from tkinter.messagebox import showinfo from calendar import month_name from datetime import datetime
root = tk.Tk()
config the root window
root.geometry('300x200') root.resizable(False, False) root.title('Combobox Widget')
label
label = ttk.Label(text="Please select a month:") label.pack(fill=tk.X, padx=5, pady=5)
create a combobox
selected_month = tk.StringVar() month_cb = ttk.Combobox(root, textvariable=selected_month)
get first 3 letters of every month name
month_cb['values'] = [month_name[m][0:3] for m in range(1, 13)]
prevent typing a value
month_cb['state'] = 'readonly'
place the widget
month_cb.pack(fill=tk.X, padx=5, pady=5)
bind the selected value changes
def month_changed(event): """ handle the month changed event """ showinfo( title='Result', message=f'You selected {selected_month.get()}!' )
month_cb.bind('<>', month_changed)
set the current month
current_month = datetime.now().strftime('%b') month_cb.set(current_month)
root.mainloop()`Code language: Python (python)
Summary #
- Use
ttk.Combobox(root, textvariable)
to create a combobox. - Set the
state
property toreadonly
to prevent users from entering custom values. - A combobox widget emits the
'<<ComboboxSelected>>'
event when the selected value changes.
Was this tutorial helpful ?