Tkinter
Radiobuttons
Ein Radiobutton, manchmal auch Optionsfeld genannt, ist ein Standardelement einer grafischen Benutzeroberfläche (GUI). Wie die Knöpfe an einem alten Radio mit denen man den Wellenbereich eingestellt hatte, hat ein Radiobutton zwei Zustände: "markiert" und "nicht markiert". Bei den alten Rundfunkgeräten sprang automatisch eine gedrückte Taste wieder heraus, wenn man eine andere drückte.
Während in einer Checkbox mehrere Alternativen markiert werden können, ist dies bei einer Gruppe von Radiobuttons nicht möglich. In einer Gruppe kann immer nur einer markiert werden.
Radiobuttons können Text oder Bilder enthalten. Der Text innerhalb eines Radiobuttons kann nur in einer Schriftart (font) angegeben werden. Eine Python-Funktion oder Methode kann mit einem Radiobutton assoziiert werden. Diese Funktion oder Methode wird aufgerufen, sobald der Radiobutton gedrückt wird.
Eine Gruppe von Radiobuttons teilt sich eine Variable, die den Wert des jeweils gesetzten Radiobuttons enthält. Wird ein Knopf gedrückt, ändert sich der Wert dieses Buttons.
Einfaches Beispiel mit Radiobuttons
from Tkinter import * root = Tk() v = IntVar() Label(root, text="""Choose a programming language:""", justify = LEFT, padx = 20).pack() Radiobutton(root, text="Python", padx = 20, variable=v, value=1).pack(anchor=W) Radiobutton(root, text="Perl", padx = 20, variable=v, value=2).pack(anchor=W) mainloop()
Das Ergebnis des vorigen Beispiels sieht wie folgt aus:
Verbesserung des vorigen Beispiels
In vielen Fällen benötigt man mehr als zwei Radiobuttons. Es wäre sehr mühselig, wenn wir jeden einzelnen Button separat definieren müssten. Eine interessante Lösung zeigen wir im folgenden Beispiel. Wir nutzen dabei die Möglichkeiten von Python. Wir definieren eine Liste der vorhandenen Sprachen, die den Text des jeweiligen zu erzeugenden Radiobuttons enthält. Anschließend erzeugen wir die Buttons mit einer for-Schleifen:from Tkinter import * root = Tk() v = IntVar() v.set(1) # initializing the choice, i.e. Python languages = [ ("Python",1), ("Perl",2), ("Java",3), ("C++",4), ("C",5) ] def ShowChoice(): print v.get() Label(root, text="""Choose your favourite programming language:""", justify = LEFT, padx = 20).pack() for txt, val in languages: Radiobutton(root, text=txt, padx = 20, variable=v, command=ShowChoice, value=val).pack(anchor=W) mainloop()
Das Ergebnis des vorigen Beispielprogrammes sieht wie folgt aus:
Indicator
Statt Radiobuttons mit weißen kreisförmigen Löchern gibt es auch eine alternative Darstellung: Der Text des Radiobuttons wird in eine klickbare Box eingebettet. Um dies zu bewerkstelligen muss man den Wert der Option "indicatoron" auf 0 setzen.Die Definition des Radiobutton aus dem vorigen Beispiel ersetzen wir einfach durch die folgende:
Radiobutton(root, text=txt, indicatoron = 0, width = 20, padx = 20, variable=v, command=ShowChoice, value=val).pack(anchor=W)
Zusätzlich zur Option "indicatoron" haben wir noch die Option "width" gesetzt.