Come creare un menu a discesa in Tkinter

  1. Tkinter OptionMenu Esempio
  2. Legare il comando a OptionMenu quando cambia il valore

Ha alcuni metodi per creare un menu a tendina in Tkinter.

  1. Usare Combobox come introdotto nel Tkinter tutorial Combobox capitolo.
  2. Utilizzare OptionMenu Widget.

Il OptionMenu è un po’ simile al widget Combobox ma è già incluso nel Tkinter stesso, quindi non è necessario importare ttk come nel caso di Combobox.

Tkinter OptionMenu Esempio

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 è il genitore del menu di opzioni creato,

variabile è la variabile di testo iniziale che ha il tipo tk.StringVar.

*OptionList è le altre opzioni del menu. * è usata per scompattare il contenitore, come tipo list qui.

Tkinter OptionMenu Esempio

Legare il comando a OptionMenu quando cambia il valore

OptionMenu non può collegare un comando quando un nuovo valore viene selezionato dalla lista delle opzioni. Non si può semplicemente collegare una funzione di richiamo ad essa come button widget

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

È necessario utilizzare un metodo di tracciamento per allegare i callback observer alla variabile OptionMenu. Ogni volta che la variabile cambia, essa attiva le funzioni di callback.

Esempio di callback OptionMenu Callback

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()

Il trace observer ha tre modalità,

modalità osservatore Spiegazione
w quando variabile è scritto da qualcuno
r quando variabile viene letto da qualcuno
u quando variabile viene cancellato

Quindi variable.trace("w", callback) significa che richiamerà la funzione callback quando variable viene scritto o selezionato dall’utente.

Tkinter OptionMenu Callback