Tutoriel Tkinter - Combobox

  1. Exemple de Combobox Python Tkinter
  2. Tkinter Combobox Event Binding
  3. Tkinter Combobox met à jour dynamiquement les valeurs
  4. Tkinter Combobox Lecture seule

Tkinter Combobox est la liste déroulante dans laquelle l’utilisateur peut choisir. C’est une combinaison de Entry et de widgets drop-down comme vous pouvez le voir. Lorsque vous cliquez sur la flèche sur le côté gauche, vous verrez un menu déroulant montrant tous les choix, et si vous cliquez sur l’un d’entre eux, il remplacera le contenu actuel de Entry.

Exemple de Combobox Python Tkinter

Tkinter Combobox_Basic.py
import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])
pprint(dict(comboExample)) 
comboExample.grid(column=0, row=1)
comboExample.current(1)

print(comboExample.current(), comboExample.get())

app.mainloop()

Tutoriel Tkinter Combobox Basic

from tkinter import ttk

Le widget Tkinter combobox est dans le module ttk de Tkinter, donc, vous devez importer ce module pour utiliser ce widget.

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])

Il crée l’instance du widget Tkinter combobox et assigne également les valeurs qui apparaîtront dans la liste déroulante.

comboExample.current(1)

Normalement, l’élément par défaut qui apparaît dans la combobox est le premier élément de la liste des valeurs. Vous pouvez aussi le changer en n’importe quel élément en utilisant la méthode current(index).

print(comboExample.current(), comboExample.get())

Vous pouvez aussi utiliser current() pour obtenir l’index de l’élément sélectionné, et utiliser la méthode get() pour obtenir l’élément lui-même.

Tkinter Combobox Event Binding

La liaison de la fonction de rappel de la combobox est différente des widgets présentés dans les derniers chapitres. La méthode bind() est la façon de lier la fonction de rappel avec l’événement virtuel combobox lorsque l’utilisateur sélectionne un élément dans la liste déroulante.

Tkinter Combobox_Virtual Event Binding.py
import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])


comboExample.grid(column=0, row=1)
comboExample.current(1)

comboExample.bind("<<ComboboxSelected>>", callbackFunc)


app.mainloop()
def callbackFunc(event):
     print("New Element Selected")

C’est la fonction de rappel définie chaque fois que vous sélectionnez un élément dans la liste.

Note

L’événement ne doit pas être sauté comme argument de passage, il est passé depuis l’événement virtuel de la combobox

comboExample.bind("<<ComboboxSelected>>", callbackFunc)

Il lie l’événement virtuel <<ComboboxSelected>> avec la fonction de rappel.

Chaque fois que vous sélectionnez un nouvel élément dans la liste, il affiche <<ComboboxSelected>>.

Tkinter Combobox met à jour dynamiquement les valeurs

La liste des choix dans la combobox de Tkinter pourrait être mise à jour dynamiquement avec l’option postcommand qui exécute la fonction donnée avant d’afficher la liste déroulante des choix.

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

def changeMonth():
    comboExample["values"] = ["July",
                              "August",
                              "September",
                              "October"
                                ]

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            postcommand=changeMonth)


comboExample.grid(column=0, row=1)

app.mainloop()

La fonction changeMonth change la liste de choix de la combobox pour être

["July",
 "August",
 "September",
 "October"
]

La combobox est vide après le démarrage de l’interface graphique et affiche les mois donnés comme ci-dessus après que l’utilisateur ait cliqué sur la flèche dans la combobox.

Tkinter Tutorial Combobox postcommand

Tkinter Combobox Lecture seule

Le contenu des éléments dans les exemples de Combobox montrés ci-dessus est éditable parce que state par défaut est normal, ce qui rend le champ de texte directement éditable.

Tkinter Combobox a les deux autres états en plus de normal,

  • readonly - le champ de texte n’est pas modifiable, et l’utilisateur ne peut que sélectionner les valeurs dans la liste déroulante.
  • disabled - la Combobox est grisée et l’interaction est impossible.
import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            state="readonly")

comboExample.grid(column=0, row=1)
comboExample.current(0)

print(comboExample.current(), comboExample.get())

app.mainloop()

L’exemple ci-dessus met la Combobox de Tkinter en lecture seule.

Si vous changez l’état de readonly à disabled, la Combobox est grisée comme montré ci-dessous.

État de la Combobox Tkinter désactivé

comments powered by Disqus