Lección 10 · 10 de 20
Listas desplegables · tkinter
El Combobox de ttk: lista de valores, valor inicial con current() o set(), modo de solo lectura y el evento <<ComboboxSelected>>.

Un Combobox (ttk.Combobox) es un campo con una lista que se despliega al pulsar la flecha. Sus opciones van en `values`, una lista de textos.
Con `state="readonly"` solo se puede elegir uno de los valores, no escribir. `current(4)` elige por posición, empezando en 0: el quinto valor, «Spain».
El segundo está en estado normal: se puede elegir de la lista o escribir otra cosa. `set("Seville")` pone un texto aunque no esté en values.
get() devuelve el texto de cada uno. El evento `<<ComboboxSelected>>` llega al elegir de la lista, y <KeyRelease>, al soltar una tecla; los dos llaman a show, que escribe «ciudad, país» en la etiqueta grande.
En DMarlon Studio es la Lista desplegable de la paleta: sus *Elementos (uno por línea)*, el *Texto inicial* y el *Estado* (readonly) se ponen en el inspector, y el estudio la escribe como ttk.Combobox unida a una StringVar.
Código · main.py
import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Combobox")root.geometry("420x250")countries = ["Argentina", "Chile", "Cuba", "Mexico", "Spain", "Uruguay"]# readonly: you can only pick one of the values.ttk.Label(root, text="Country (pick one)").pack(anchor="w", padx=40, pady=(24, 2))country = ttk.Combobox(root, values=countries, state="readonly", width=28)country.current(4) # index 4 of values: "Spain"country.pack(anchor="w", padx=40)# normal: you can also type a value that is not in the list.ttk.Label(root, text="City (pick or type)").pack(anchor="w", padx=40, pady=(14, 2))city = ttk.Combobox(root, values=["Madrid", "Barcelona", "Valencia"], width=28)city.set("Seville")city.pack(anchor="w", padx=40)result = ttk.Label(root, font=("Helvetica", 16))result.pack(pady=22)def show(event=None): result.config(text=f"{city.get()}, {country.get()}")country.bind("<<ComboboxSelected>>", show)city.bind("<<ComboboxSelected>>", show)city.bind("<KeyRelease>", show)show()root.mainloop()Para recordar
valueses la lista de opciones.current(i)elige por posición;set(texto)pone cualquier texto.state="readonly"impide escribir valores que no estén en la lista.<<ComboboxSelected>>avisa al elegir una opción.
Ejercicio
Haga que, al elegir un país, la lista de ciudades cambie con city.config(values=...) y muestre la primera ciudad de ese país.