Auswahl aus einer Listbox

Verwendung von Listboxen

Listboxen werden verwendet, um eine Liste von Einträgen zu verwalten. Listboxen kann man auf vielerlei Weisen nutzen. Wir zeigen hier nur eine einfache Möglichkeit auf.

Beispiel: Namen auswählen - Version 1

Der Benutzer kann einen Eintrag auswählen. Wenn er anschließend die Schaltfläche anklickt, dann wird eine Begrüßung auf dem Schriftfeld erzeugt.

Anwendungsfenster

Mit dem folgenden Programm lässt sich diese grafische Benutzeroberfläche implementieren.

from tkinter import *
# Ereignisverarbeitung
    
def buttonVerarbeitenClick():
    listeAusgewaehlt = listboxNamen.curselection()
    itemAusgewaehlt = listeAusgewaehlt[0]
    nameAusgewaehlt = listboxNamen.get(itemAusgewaehlt) 
    textBegruessung = 'Hallo ' + nameAusgewaehlt +'!'
    labelText.config(text=textBegruessung)

# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
tkFenster.geometry('120x160')
# Rahmen Listbox
frameListbox = Frame(master=tkFenster, bg='#FFCFC9')
frameListbox.place(x=5, y=5, width=110, height=80)
# Rahmen Ausgabe
frameAusgabe = Frame(master=tkFenster, bg='#D5E88F')
frameAusgabe.place(x=5, y=90, width=110, height=30)
# Rahmen Verarbeitung
frameVerarbeitung = Frame(master=tkFenster, bg='#FBD975')
frameVerarbeitung.place(x=5, y=125, width=110, height=30)
# Kontrollvariable
text = StringVar()
# Listbox
listboxNamen = Listbox(master=frameListbox, selectmode='browse')
listboxNamen.insert('end', 'Anna')
listboxNamen.insert('end', 'Bernd')
listboxNamen.insert('end', 'Clara')
listboxNamen.insert('end', 'Dominik')
listboxNamen.place(x=5, y=5, width=100, height=70)
# Label Text
labelText = Label(master=frameAusgabe, bg='white')
labelText.place(x=5, y=5, width=100, height=20)
# Button verarbeiten
buttonVerarbeiten = Button(master=frameVerarbeitung, text='begrüßen', command=buttonVerarbeitenClick)
buttonVerarbeiten.place(x=5, y=5, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()

Eine Listbox-Komponente wird mit Hilfe eines Listbox-Objekts erstellt. Mit der insert-Methode werden Einträge in der Liste eingefügt.

Die Vorgabe selectmode='browse' bei der Erzeugung eines Listbox-Objekts legt fest, dass man genau ein, aber beliebiges Element aus der Liste auswählen kann.

Die Methode curselection() liefert die Liste aller Itemindices der ausgewählten Einträge. Diese Liste besteht im vorliegenden Programm aus keinem oder einem Element. Mit der get-Methode kann man auf den Eintrag zu einem Itemindex zugreifen.

Weitergehende Informationen erhältst du in einem Nachschlagewerk.

Aufgabe 1

Teste das vorgegebene Programm.

Beispiel: Namen auswählen - Version 2

Hier wird eine Ereignisbehandlungsmethode direkt an das Listbox-Objekt angebunden.

Anwendungsfenster

Die grafische Benutzeroberfläche benötigt daher keine Schaltfläche.

from tkinter import *
# Ereignisverarbeitung

def verarbeiten(event):
    listeAusgewaehlt = listboxNamen.curselection()
    itemAusgewaehlt = listeAusgewaehlt[0]
    nameAusgewaehlt = listboxNamen.get(itemAusgewaehlt) 
    textBegruessung = 'Hallo ' + nameAusgewaehlt +'!'
    labelText.config(text=textBegruessung)
    
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
tkFenster.geometry('120x125')
# Rahmen Listbox
frameListbox = Frame(master=tkFenster, bg='#FFCFC9')
frameListbox.place(x=5, y=5, width=110, height=80)
# Rahmen Ausgabe
frameAusgabe = Frame(master=tkFenster, bg='#D5E88F')
frameAusgabe.place(x=5, y=90, width=110, height=30)
# Listbox
listboxNamen = Listbox(master=frameListbox, selectmode='browse')
listboxNamen.insert('end', 'Anna')
listboxNamen.insert('end', 'Bernd')
listboxNamen.insert('end', 'Clara')
listboxNamen.insert('end', 'Dominik')
listboxNamen.place(x=5, y=5, width=100, height=70)
listboxNamen.bind('<<ListboxSelect>>', verarbeiten)
# Label Text
labelText = Label(master=frameAusgabe, bg='white')
labelText.place(x=5, y=5, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()

Aufgabe 2

Teste das vorgegebene Programm.

Beispiel: Namen auswählen - Version 3

Oft hat man eine längere Liste von Einträgen, die nicht alle angezeigt werden können.

Anwendungsfenster

Das folgende Programm zeigt, wie man eine sogenannte Scrollbar mit einer Listbox verknüpft.

from tkinter import *
# Ereignisverarbeitung

def verarbeiten(event):
    listeAusgewaehlt = listboxNamen.curselection()
    itemAusgewaehlt = listeAusgewaehlt[0]
    nameAusgewaehlt = listboxNamen.get(itemAusgewaehlt) 
    textBegruessung = 'Hallo ' + nameAusgewaehlt +'!'
    labelText.config(text=textBegruessung)
    
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
tkFenster.geometry('120x125')
# Rahmen Listbox
frameListbox = Frame(master=tkFenster, bg='#FFCFC9')
frameListbox.place(x=5, y=5, width=110, height=80)
# Rahmen Ausgabe
frameAusgabe = Frame(master=tkFenster, bg='#D5E88F')
frameAusgabe.place(x=5, y=90, width=110, height=30)
# Listbox
listboxNamen = Listbox(master=frameListbox, selectmode='browse')
listboxNamen.insert('end', 'Anna')
listboxNamen.insert('end', 'Bernd')
listboxNamen.insert('end', 'Clara')
listboxNamen.insert('end', 'Dominik')
listboxNamen.insert('end', 'Eva')
listboxNamen.insert('end', 'Fabian')
listboxNamen.insert('end', 'Greta')
listboxNamen.insert('end', 'Hakon')
listboxNamen.place(x=5, y=5, width=80, height=70)
listboxNamen.bind('<<ListboxSelect>>', verarbeiten)
# Scroolbar
yScroll = Scrollbar(master=frameListbox, orient='vertical')
yScroll.place(x=95, y=5, width=10, height=70)
listboxNamen.config(yscrollcommand=yScroll.set)
yScroll.config(command=listboxNamen.yview)
# Label Text
labelText = Label(master=frameAusgabe, bg='white')
labelText.place(x=5, y=5, width=100, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()

Aufgabe 3

Teste das vorgegebene Programm.

X

Fehler melden

X

Suche