Come creare un menu a discesa in Tkinter
Ha alcuni metodi per creare un menu a tendina in Tkinter.
- Usare Combobox come introdotto nel Tkinter tutorial Combobox capitolo.
- 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.
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.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook