Tkinter Tutorial - Combobox

  1. Esempio di Combobox Python Tkinter
  2. Tkinter Combobox Event Binding
  3. Tkinter Combobox Aggiorna dinamicamente i valori
  4. Tkinter Combobox Sola lettura

Tkinter Combobox è l’lista a discesa tra cui l’utente può scegliere. È una combinazione di Entry e di widget drop-down come si può vedere. Quando si clicca la freccia sul lato sinistro, si vedrà un menu a tendina che mostra tutte le scelte, e se si clicca su uno di essi, sostituirà gli attuali contenuti di Entry.

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

Tkinter Tutorial Combobox Basic

from tkinter import ttk

Il widget della combobox Tkinter è nel modulo ttk di Tkinter, quindi è necessario importare questo modulo per utilizzare questo widget.

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

Esso crea l’istanza del widget della combobox Tkinter e assegna anche i valori che appariranno nell’lista a discesa.

comboExample.current(1)

Normalmente, l’elemento predefinito che appare nella combobox è il primo elemento della lista dei valori. Si può anche cambiarlo in qualsiasi elemento usando il metodo current(index).

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

Si potrebbe anche usare current() per ottenere l’indice dell’elemento selezionato correntemente, e usare il metodo get() per ottenere l’elemento stesso.

Tkinter Combobox Event Binding

La funzione di richiamo della combobox è diversa dai widget introdotti negli ultimi capitoli. Il metodo bind() è il modo di legare la funzione callback con l’evento virtuale della combobox quando l’utente seleziona un elemento nella lista a discesa.

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

Questa è la funzione di callback definita ogni volta che si seleziona un elemento dalla lista.

Nota

L’evento non deve essere saltato come argomento di passaggio, viene passato dall’evento virtuale della combobox

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

Lega l’evento virtuale <<ComboboxSelected>> con la funzione di callback.

Ogni volta che si seleziona un nuovo elemento dalla lista, stampa New Element Selected.

Tkinter Combobox Aggiorna dinamicamente i valori

L’lista delle scelte nella combobox di Tkinter potrebbe essere aggiornato dinamicamente con l’opzione postcommand che esegue la funzione data prima di visualizzare l’lista a comparsa delle scelte.

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 funzione changeMonth cambia l’lista delle scelte nella combobox per essere

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

La combobox mostra vuoto dopo l’avvio dell’interfaccia grafica e mostra i mesi indicati come sopra dopo che l’utente ha cliccato la freccia nella combobox.

Tkinter Tutorial Combobox Combobox postcommand

Tkinter Combobox Sola lettura

Il contenuto degli elementi negli esempi di Combobox mostrati sopra è modificabile perché il state predefinito è normale che rende il campo di testo direttamente modificabile.

Tkinter Combobox ha gli altri due stati oltre a normal,

  • readonly - il campo di testo non è modificabile, e l’utente può selezionare solo i valori dall’lista a discesa.
  • disabled - la Combobox è in grigio e l’interazione è impossibile.
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’esempio sopra riportato imposta la Combobox Tkinter in sola lettura.

Se si cambia lo stato da readonly a disabled, la Combobox è in grigio come mostrato sotto.

Stato della Combobox Tkinter Disabilitata