Tutorial de Tkinter - Combobox

  1. Ejemplo de Combobox de Python Tkinter
  2. Encuadernación de eventos de Tkinter Combobox
  3. Tkinter Combobox Actualizar valores dinámicamente
  4. Tkinter Combobox Sólo lectura

Tkinter Combobox es la lista desplegable para que el usuario pueda elegir. Es una combinación de Entry y de widgets drop-down como puedes ver. Cuando haga clic en la flecha de la izquierda, verá un menú desplegable que muestra todas las opciones, y si hace clic en una de ellas, reemplazará el contenido actual de Entry.

Ejemplo de Combobox de Python Tkinter

Tkinter Combobox_Basic.py
import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])
pprint(dict(comboExample)) 
comboExample.grid(column=0, row=1)
comboExample.current(1)

print(comboExample.current(), comboExample.get())

app.mainloop()

Tkinter Tutorial Combobox Basic

from tkinter import ttk

El widget Tkinter combobox está en el módulo ttk de Tkinter, por lo tanto, necesitas importar este módulo para usar este widget.

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])

Crea la instancia del widget Tkinter combobox y también asigna los valores que aparecerán en la lista desplegable.

comboExample.current(1)

Normalmente, el elemento por defecto que se muestra en el combobox es el primer elemento de la lista de valores. También puede cambiarlo a cualquier elemento usando el método current(index).

print(comboExample.current(), comboExample.get())

También puede usar current() para obtener el índice del elemento seleccionado actual, y usar el método get() para obtener el elemento mismo.

Encuadernación de eventos de Tkinter Combobox

El enlace de la función de devolución de llamada del combobox es diferente de los widgets introducidos en los últimos capítulos. El método bind() es la forma de enlazar la función de devolución de llamada con el evento virtual combobox cuando el usuario selecciona un elemento en la lista desplegable.

Tkinter Combobox_Virtual Event Binding.py
import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])


comboExample.grid(column=0, row=1)
comboExample.current(1)

comboExample.bind("<<ComboboxSelected>>", callbackFunc)


app.mainloop()
def callbackFunc(event):
     print("New Element Selected")

Esta es la función de devolución de llamada definida siempre que se selecciona un elemento de la lista.

Nota

El evento no se salta como argumento de paso, sino que se pasa desde el evento virtual del combobox.

comboExample.bind("<<ComboboxSelected>>", callbackFunc)

Vincula el evento virtual <<ComboboxSelected>> con la función de devolución de llamada.

Cada vez que se selecciona un nuevo elemento de la lista, se imprime New Element Selected.

Tkinter Combobox Actualizar valores dinámicamente

La lista de opciones en el combobox de Tkinter puede ser actualizada dinámicamente con la opción postcommand que ejecuta la función dada antes de mostrar la lista desplegable de opciones.

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

def changeMonth():
    comboExample["values"] = ["July",
                              "August",
                              "September",
                              "October"
                                ]

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            postcommand=changeMonth)


comboExample.grid(column=0, row=1)

app.mainloop()

La función changeMonth cambia la lista de opciones del combobox para que sea

["July",
 "August",
 "September",
 "October"
]

El combobox se muestra vacío después de que se inicia la GUI y muestra los meses dados como arriba después de que el usuario hace clic en la flecha del combobox.

Tkinter Tutorial Combobox postcommand

Tkinter Combobox Sólo lectura

El contenido de los elementos en los ejemplos de Combobox mostrados arriba es editable porque el status por defecto es normal lo que hace que el campo de texto sea directamente editable.

Tkinter Combobox tiene los otros dos estados además del normal,

  • readonly - el campo de texto no es editable, y el usuario sólo puede seleccionar los valores de la lista desplegable.
  • disabled - el Combobox está en gris y la interacción es imposible.
import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            state="readonly")

comboExample.grid(column=0, row=1)
comboExample.current(0)

print(comboExample.current(), comboExample.get())

app.mainloop()

El ejemplo anterior establece el Tkinter Combobox como de sólo lectura.

Si usted cambia el estado de readonly a disabled, el Combobox aparece en gris como se muestra a continuación.

Estado del Tkinter Combobox Disabled

comments powered by Disqus