TUTORIAL · Tkinter
Tkinter Tutorial - Combobox
Tutorial di Python Tkinter combobox
In questa pagina
Un ttk.Combobox è un campo Tkinter con un elenco a discesa di scelte. Imposta la sua opzione values per popolare l’elenco, chiama current(index) per selezionare per posizione e usa get() per leggere il testo visualizzato. Un elenco popolato non seleziona automaticamente il suo primo elemento. Il breve esempio Python seguente illustra la relazione tra indice e testo senza creare una finestra; i frammenti reali di widget in questa guida sono mostrati in linea perché l’ambiente di esecuzione fornito non ha un display grafico. Per i callback di selezione, associa il nome esatto dell’evento virtuale <<ComboboxSelected>> in modo che il tuo gestore risponda quando un utente sceglie un elemento. (<<ComboboxSelected>>)
Esempio di ttk.Combobox in Python Tkinter
Questo piccolo esempio mostra come una selezione esplicita corrisponde alla sua posizione e al suo testo visualizzato. Viene eseguito senza aprire una finestra Tk.
months = ["January", "February", "March", "April"]
selected_index = 1
selected_text = months[selected_index]
print(selected_index, selected_text)
1 February
Per un widget, importa ttk con from tkinter import ttk, crealo con ttk.Combobox(parent, values=months) e imposta la scelta iniziale con combo.current(1). Il metodo current() senza argomento restituisce l’indice dell’elemento selezionato; get() restituisce il suo testo visualizzato. Nello stato predefinito normal, un utente può digitare un valore che non è nell’elenco: get() restituisce allora quel testo e current() restituisce -1 quando non corrisponde a un elemento dell’elenco.
Impostare i font per la combobox e il suo elenco
L’opzione font definisce lo stile del campo della Combobox. Il suo elenco a discesa è una listbox Tk separata, quindi configura quell’elenco con il pattern di opzione *TCombobox*Listbox.font. Ad esempio, crea una tupla di font come ("Courier", 16, "bold") per il campo, quindi imposta l’opzione della finestra radice con app.option_add("*TCombobox*Listbox.font", ("Courier", 14)) prima di aprire l’elenco. Usa tuple separate quando il campo e l’elenco hanno bisogno di dimensioni o pesi diversi. La disponibilità delle famiglie di font dipende dal sistema operativo, che potrebbe sostituirne una installata.
Impostare solo il font della Combobox può lasciare il testo dell’elenco nel suo font predefinito di sistema. Configura l’opzione della listbox prima che l’elenco a discesa si apra per la prima volta, in modo che entrambe le parti del controllo usino lo stile previsto.
Associare un callback a una selezione della combobox
Tkinter chiama l’evento virtuale di selezione <<ComboboxSelected>>. Associa quel nome esatto con combo.bind("<<ComboboxSelected>>", show_selection) per eseguire una funzione dopo che un utente sceglie un elemento dall’elenco. Definisci il callback in modo che accetti l’oggetto evento di Tkinter, ad esempio def show_selection(event): print("Selected:", event.widget.get()). Quando l’utente sceglie March, il callback stampa Selected: March. L’evento viene generato per una selezione dell’utente dall’elenco; impostare un valore nel codice con current() non rappresenta un utente che seleziona un elemento.
Il callback legge il widget che ha emesso l’evento tramite event.widget, quindi può anche essere riutilizzato per più di una Combobox se necessario. Mantieni il callback concentrato sulla risposta a una selezione, come aggiornare un’etichetta correlata o ricalcolare un valore di un modulo.
Aggiornare i valori della combobox prima che l’elenco si apra
Usa l’opzione postcommand quando le scelte devono essere aggiornate ogni volta che l’utente apre l’elenco a discesa. Tkinter chiama la funzione assegnata immediatamente prima di mostrare l’elenco, permettendole di sostituire combo["values"]. Ad esempio, una funzione refresh_months() può assegnare ["July", "August", "September", "October"]; passala al costruttore come postcommand=refresh_months.
postcommand viene eseguito prima che l’elenco venga mostrato, non quando la finestra viene creata. L’elenco iniziale può contenere da January ad April, poi la sua prima apertura aggiorna le scelte disponibili a da July a October. Il testo visualizzato non diventa automaticamente una selezione solo perché le scelte sono cambiate. Mantieni il callback rapido perché viene eseguito come parte dell’apertura dell’elenco a discesa.
Rendere la combobox di sola lettura o disabilitata
Una Combobox usa state="normal" per impostazione predefinita, il che consente all’utente di digitare nel suo campo e scegliere un elemento dell’elenco. Imposta state="readonly" per impedire la digitazione pur consentendo una scelta dall’elenco. Imposta state="disabled" quando il controllo deve essere non disponibile; Tkinter lo rende come inattivo e impedisce l’interazione. Ad esempio, crea controlli con ttk.Combobox(app, values=months, state="normal"), state="readonly" o state="disabled" per confrontare queste modalità in una finestra.
Usa readonly quando un valore deve provenire dalle scelte offerte ma l’utente deve comunque poterlo cambiare. Usa disabled quando il valore è temporaneamente non disponibile o il controllo è informativo. Una Combobox disabilitata non può essere aperta né modificata; riportare il suo stato a normal o readonly ripristina l’interazione. Per altri widget Tkinter che possono accompagnare un modulo, consulta il tutorial Tkinter Entry e il tutorial Tkinter Button.