Tkinter Tutorial - Combobox
- Python Tkinter Combobox Beispiel
- Tkinter Combobox Ereignis-Bindung
- Tkinter Combobox Dynamische Aktualisierung der Werte
Tkinter Combobox ist die Dropdown-Liste, aus der der Benutzer wählen kann. Es ist eine Kombination aus Entry
und drop-down
Widgets, wie Sie sehen können. Wenn Sie auf den Pfeil auf der linken Seite klicken, sehen Sie ein Drop-Down-Menü mit allen Auswahlmöglichkeiten, und wenn Sie auf eines klicken, ersetzt es den aktuellen Entry
Inhalt.
Python Tkinter Combobox Beispiel
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
Das Tkinter Combobox Widget befindet sich im ttk
Modul von Tkinter, deshalb müssen Sie dieses Modul importieren, um dieses Widget zu benutzen.
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
Es erstellt die Instanz des Tkinter Combobox-Widgets und weist auch die Werte zu, die in der Dropdown-Liste erscheinen werden.
comboExample.current(1)
Normalerweise ist das Standardelement, das in der Combobox angezeigt wird, das erste Element in der Werteliste. Sie können es auch mit der Methode current(index)
in ein beliebiges Element ändern.
print(comboExample.current(), comboExample.get())
Man könnte auch current()
benutzen, um den Index des aktuell ausgewählten Elements zu erhalten, und die get()
Methode benutzen, um das Element selbst zu erhalten.
Tkinter Combobox Ereignis-Bindung
Die Bindung der Combobox-Callback-Funktion unterscheidet sich von den in den letzten Kapiteln vorgestellten Widgets. Die Methode bind()
ist die Art und Weise, die Callback-Funktion mit dem virtuellen Ereignis der Combobox zu binden, wenn der Benutzer ein Element in der Dropdown-Liste auswählt.
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")
Dies ist die definierte Callback-Funktion, wenn der Benutzer ein Element aus der Liste auswählt.
event
soll nicht als Übergabeargument übersprungen werden, es wird aus der Combobox virtuelles Ereignis übergebencomboExample.bind("<<ComboboxSelected>>", callbackFunc)
Es bindet das virtuelle Ereignis <<<ComboboxSelected>>
an die Callback-Funktion.
Jedes Mal, wenn Sie ein neues Element aus der Liste auswählen, druckt es New Element Selected
aus.
Tkinter Combobox Dynamische Aktualisierung der Werte
Die Liste der Auswahlmöglichkeiten in der Tkinter Combobox kann dynamisch mit der Option postcommand
aktualisiert werden, die die angegebene Funktion ausführt, bevor die Pop-Down-Liste der Auswahlmöglichkeiten angezeigt wird.
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()
Die Funktion changeMonth
ändert die Liste der Auswahlmöglichkeiten in der Combobox auf
["July", "August", "September", "October"]
Die Combobox wird nach dem Start der GUI leer angezeigt und zeigt die angegebenen Monate wie oben, nachdem der Benutzer auf den Pfeil in der Combobox geklickt hat.
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