Comment créer un menu déroulant dans Tkinter

  1. Tkinter OptionMenu Exemple
  2. Lier la commande à OptionMenu lorsque la valeur change

Il a quelques méthodes pour créer un menu déroulant dans Tkinter.

  1. Utilisez Combobox comme présenté dans le chapitre Tkinter tutorial Combobox.
  2. Utilisez OptionMenu Widget.

Le menu option est un peu similaire au widget Combobox mais est déjà inclus dans le Tkinter lui-même, donc, vous n’avez pas besoin d’importer ttk comme dans le cas de Combobox.

Tkinter OptionMenu Exemple

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 est le parent du menu d’option créé,

variable est la variable texte initiale qui a le type tk.StringVar.

*OptionList est l’autre option du menu. * est utilisé pour décompresser le conteneur, comme list type ici.

Exemple Tkinter OptionMenu

Lier la commande à OptionMenu lorsque la valeur change

Le OptionMenu ne pouvait pas lier une commande quand une nouvelle valeur est sélectionnée dans la liste des options. Vous ne pourriez pas simplement lier une fonction de rappel à cette commande comme button widget

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

Vous devez utiliser une méthode de trace pour attacher les callbacks observer à la variable OptionMenu. Chaque fois que la variable change, elle déclenche les fonctions de rappel.

Exemple de rappel de la variable 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()

La trace observer a trois modes,

mode observateur Explication
w quand variable est écrit par quelqu’un
r quand variable est lu par quelqu’un
u quand la variable est supprimée

Ensuite, variable.trace("w", callback) signifie qu’il appellera la fonction callback quand variable est écrite ou sélectionnée par l’utilisateur.

Tkinter OptionMenu Callback

comments powered by Disqus