Radiobutton in Tkinter
Der Name Radiobutton hat seinen technischen Ursprung von Omas Radio aus der Küche. Dieses hatte Knöpfe, die man mit einzelnen Radiosendern belegen konnte. Drücke man einen, sprang der bisher gedrückte in seine Ausgangsstellung. Man. konnte also immer nur einen Sender gleichzeitig wählen (was auch irgendwie sinnvoll ist).
Das gleiche gilt für unsere Radiobutton in einer GUI. Hier haben wir die tpyschen Elemente, um Eingaben abzufragen wie beispielsweise Mann oder Frau etc.
Radiobuttons machen also erst Sinn, wenn man mehr als eine Auswahl hat (sonst wäre die Checkbutton die erste Wahl).
Wir haben bei Radiobuttons eine Beschriftung und einen Rückgabewert jeder Auswahl. Hierbei kann aber Beschriftung und Rückgabewert gleich sein, muss aber nicht. Sprich wir haben einen Button mit der Beschriftung „Herr“ und als Rückgabewert wird „m“ geliefert bzw. („Frau“ mit Rückgabewert „w“). Im ersten Beispiel zum Verständnis des Widgets ist Beschriftung und Rückgabewert identisch.
Wir erstellen dazu eine Liste in Python:
anrede = ["Frau", "Herr"]
Im nächsten Schritt müssen wir festlegen, welche Art unsere Rückgabevariable hat (String, Int, …) und wie diese benannt ist:
anrede = ["Frau", "Herr"]
ausgewaehlt = tk.StringVar()
Und nun können wir unsere Liste durchlaufen und die Radiobuttons ausgeben lassen:
for einzelwert in anrede:
radiob = tk.Radiobutton(root, text=einzelwert, value=einzelwert, variable=ausgewaehlt)
radiob.pack()
Das führt zu folgender Ausgabe:
[bild[Radiobutton ohne Vorgabewert]]Wir erhalten die Lustige Ausgabe mit durchstrichenen Buttons, weil wir keinen Wert vorab gesetzt haben! Wir können auch einen Wert vorab als erste angewählten Wert setzen:
ausgewaehlt = tk.StringVar()
ausgewaehlt.set("Frau")
Den gewählten Wert können wir abfragen über:
print(ausgewaehlt.get())
aktuell_ausgewaehlt = ausgewaehlt.get()
Jetzt wollen wir direkt bei Änderung des Wertes eine Aktion anstoßen. Also wird das typische command
aufgenommen:
Hier der komplette Code:
def ausgabe():
print(ausgewaehlt.get())
aktuell_ausgewaehlt = ausgewaehlt.get()
textausgabe = tk.Label(root, text=aktuell_ausgewaehlt, bg="orange")
textausgabe.pack()
anrede = ["Frau", "Herr"]
ausgewaehlt = tk.StringVar()
ausgewaehlt.set("Frau")
for einzelwert in anrede:
radiob = tk.Radiobutton(root, text=einzelwert, value=einzelwert, variable=ausgewaehlt, command=ausgabe)
radiob.pack()
Würde man den Rückgabewert anders als den Anzeigewert setzen wollen, würde anstelle der Liste ein Dictionary nutzen.
Folgende Attribute stehen zur Verfügung:
activebackground, activeforeground, anchor, background, bd, bg, bor- derwidth, command, fg, foreground, height, justify, overrelief, padx, pady, relief, state, takefocus, text, textvariable, width
indicatoron und variable