TUTORIAL · Tkinter

Tkinter Tutorial - Combobox

Tutorial zur Python Tkinter Combobox

Auf dieser Seite

Eine ttk.Combobox ist ein Tkinter-Feld mit einer Dropdown-Liste von Auswahlmöglichkeiten. Setzen Sie seine Option values, um die Liste zu füllen, rufen Sie current(index) auf, um nach Position auszuwählen, und verwenden Sie get(), um den angezeigten Text zu lesen. Eine gefüllte Liste wählt ihr erstes Element nicht automatisch aus. Das kurze Python-Beispiel unten veranschaulicht die Beziehung zwischen Index und Text, ohne ein Fenster zu erstellen; die eigentlichen Widget-Snippets in dieser Anleitung werden inline gezeigt, weil die bereitgestellte Ausführungsumgebung keine grafische Anzeige hat. Für Auswahl-Callbacks binden Sie den exakten Namen des virtuellen Ereignisses <<ComboboxSelected>>, damit Ihr Handler reagiert, wenn ein Benutzer ein Element auswählt. (<<ComboboxSelected>>)

Python Tkinter ttk.Combobox Beispiel

Dieses kleine Beispiel zeigt, wie eine explizite Auswahl auf ihre Position und ihren angezeigten Text abgebildet wird. Es läuft, ohne ein Tk-Fenster zu öffnen.

months = ["January", "February", "March", "April"]
selected_index = 1
selected_text = months[selected_index]
print(selected_index, selected_text)
1 February

Importieren Sie für ein Widget ttk mit from tkinter import ttk, erstellen Sie es mit ttk.Combobox(parent, values=months) und setzen Sie die anfängliche Auswahl mit combo.current(1). Die Methode current() ohne Argument gibt den Index des ausgewählten Elements zurück; get() gibt seinen angezeigten Text zurück. Im Standardzustand normal kann ein Benutzer einen Wert eingeben, der nicht in der Liste steht: get() gibt dann diesen Text zurück und current() gibt -1 zurück, wenn er mit keinem Listenelement übereinstimmt.

Tkinter Tutorial Combobox Grundlagen

Schriftarten für die Combobox und ihre Liste festlegen

Die Option font gestaltet das Combobox-Feld. Ihre Dropdown-Liste ist eine separate Tk-Listbox, konfigurieren Sie diese Liste also mit dem Optionsmuster *TCombobox*Listbox.font. Erstellen Sie zum Beispiel ein Schrift-Tupel wie ("Courier", 16, "bold") für das Feld und setzen Sie dann die Option des Root-Fensters mit app.option_add("*TCombobox*Listbox.font", ("Courier", 14)), bevor Sie die Liste öffnen. Verwenden Sie separate Tupel, wenn Feld und Liste unterschiedliche Größen oder Gewichte benötigen. Die Verfügbarkeit von Schriftfamilien hängt vom Betriebssystem ab, das möglicherweise eine installierte Schriftart ersetzt.

Tkinter Tutorial Combobox Schriftarten festlegen

Wenn Sie nur das font der Combobox setzen, kann der Listentext in seiner Standardschriftart des Systems bleiben. Konfigurieren Sie die Listbox-Option, bevor sich die Dropdown-Liste zum ersten Mal öffnet, damit beide Teile des Steuerelements die beabsichtigte Gestaltung verwenden.

Einen Callback an eine Combobox-Auswahl binden

Tkinter nennt das virtuelle Auswahlereignis <<ComboboxSelected>>. Binden Sie diesen exakten Namen mit combo.bind("<<ComboboxSelected>>", show_selection), um eine Funktion auszuführen, nachdem ein Benutzer ein Element aus der Liste gewählt hat. Definieren Sie den Callback so, dass er Tkinters Ereignisobjekt akzeptiert, zum Beispiel def show_selection(event): print("Selected:", event.widget.get()). Wenn der Benutzer March wählt, gibt der Callback Selected: March aus. Das Ereignis wird für eine Benutzerauswahl aus der Liste erzeugt; das Setzen eines Wertes im Code mit current() stellt keine Benutzerauswahl eines Elements dar.

Der Callback liest das Widget, das das Ereignis ausgelöst hat, über event.widget, sodass er bei Bedarf auch für mehr als eine Combobox wiederverwendet werden kann. Halten Sie den Callback auf die Reaktion auf eine Auswahl konzentriert, etwa das Aktualisieren eines zugehörigen Labels oder das Neuberechnen eines Formularwertes.

Combobox-Werte aktualisieren, bevor sich die Liste öffnet

Verwenden Sie die Option postcommand, wenn die Auswahlmöglichkeiten jedes Mal aktualisiert werden sollen, wenn der Benutzer die Dropdown-Liste öffnet. Tkinter ruft die zugewiesene Funktion unmittelbar vor der Anzeige der Liste auf, sodass sie combo["values"] ersetzen kann. Zum Beispiel kann eine Funktion refresh_months() ["July", "August", "September", "October"] zuweisen; übergeben Sie sie dem Konstruktor als postcommand=refresh_months.

postcommand läuft, bevor die Liste gezeigt wird, nicht, wenn das Fenster erstellt wird. Die anfängliche Liste kann January bis April enthalten, dann aktualisiert ihr erstes Öffnen die verfügbaren Auswahlmöglichkeiten auf July bis October. Der angezeigte Text wird nicht automatisch zu einer Auswahl, nur weil sich die Auswahlmöglichkeiten geändert haben. Halten Sie den Callback schnell, weil er als Teil des Öffnens der Dropdown-Liste läuft.

Tkinter Tutorial Combobox postcommand

Die Combobox schreibgeschützt oder deaktiviert machen

Eine Combobox verwendet standardmäßig state="normal", was dem Benutzer erlaubt, in ihr Feld zu tippen und ein aufgelistetes Element zu wählen. Setzen Sie state="readonly", um das Tippen zu verhindern, während eine Auswahl aus der Liste weiterhin möglich ist. Setzen Sie state="disabled", wenn das Steuerelement nicht verfügbar sein soll; Tkinter stellt es als inaktiv dar und verhindert Interaktion. Erstellen Sie zum Beispiel Steuerelemente mit ttk.Combobox(app, values=months, state="normal"), state="readonly" oder state="disabled", um diese Modi in einem Fenster zu vergleichen.

Verwenden Sie readonly, wenn ein Wert aus den angebotenen Auswahlmöglichkeiten kommen muss, der Benutzer ihn aber dennoch ändern können soll. Verwenden Sie disabled, wenn der Wert vorübergehend nicht verfügbar ist oder das Steuerelement informativ ist. Eine deaktivierte Combobox kann nicht geöffnet oder bearbeitet werden; das Zurücksetzen ihres Zustands auf normal oder readonly stellt die Interaktion wieder her. Weitere Tkinter-Widgets, die ein Formular begleiten können, finden Sie im Tkinter Entry Tutorial und im Tkinter Button Tutorial.