Tkinter Tutorial - Combobox
- Esempio di Combobox Python Tkinter
- Tkinter Combobox Event Binding
- Tkinter Combobox Aggiorna dinamicamente i valori
- 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
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()
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.
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.
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 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.
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