Come creare un menu a discesa in Tkinter

Jinku Hu 25 giugno 2020
  1. Tkinter OptionMenu Esempio
  2. Legare il comando a OptionMenu quando cambia il valore
Come creare un menu a discesa in Tkinter

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

Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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