Cómo crear un menú desplegable en Tkinter

  1. Ejemplo de Tkinter OptionMenu
  2. Comando Bind al menú de opciones cuando el valor cambia

Tiene algunos métodos para crear un menú desplegable en Tkinter.

  1. Utilizar el Combobox tal y como se introdujo en el capítulo Combobox del tutorial de Tkinter.
  2. Utilice el Widget del menú de opciones.

El OptionMenu es un poco similar al widget Combobox pero ya está incluido en el propio Tkinter, por lo tanto, no necesita importar ttk como en el caso de Combobox.

Ejemplo de Tkinter OptionMenu

import tkinter as tk

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = tk.Tk()

app.geometry('100x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack()

app.mainloop()
opt = tk.OptionMenu(app, variable, *OptionList)

app es el padre del menú de opciones creado,

La variable es la variable de texto inicial que tiene el tipo tk.StringVar.

*OptionList es la otra opción del menú. Se usa para desempaquetar el contenedor, como list, escribe aquí.

Ejemplo de Tkinter OptionMenu

Comando Bind al menú de opciones cuando el valor cambia

El OptionMenu no podía enlazar un comando cuando se seleccionaba un nuevo valor de la lista de opciones. No se puede simplemente enlazar una función de devolución de llamada a él como widget de botones

tk.Button(app, text="Increase", width=30, command=change_label_number)

Necesitas usar un método de rastreo para adjuntar llamadas observer a la variable OptionMenu. Cada vez que la variable cambia, se activan las funciones de devolución de llamada.

Ejemplo de devolución de llamada en el OptionMenu

import tkinter as tk

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = tk.Tk()

app.geometry('100x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack(side="top")


labelTest = tk.Label(text="", font=('Helvetica', 12), fg='red')
labelTest.pack(side="top")

def callback(*args):
    labelTest.configure(text="The selected item is {}".format(variable.get()))

variable.trace("w", callback)

app.mainloop()

El observer de la traza tiene tres modos,

modo de observador Explicación
w cuando variable es escrito por alguien
r cuando variable es leído por alguien
u cuando se borra la variable.

Entonces variable.trace("w", callback) significa que llamará a la función callback cuando variable sea escrita o seleccionada por el usuario.

Opción de TkinterMenú Callback

comments powered by Disqus