Tkinter



Radiobuttons

Altes Radie, Image ist Public Domain
Ein Radiobutton, manchmal auch Optionsfeld genannt, ist ein Standard­element einer grafischen Benutzer­ober­fläche (GUI). Wie die Knöpfe an einem alten Radio mit denen man den Wellen­bereich ein­gestellt hatte, hat ein Radio­button 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:

Radio Buttons, Simple Example

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:

Radio Buttons, Extended Example

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.

Radiobuttons mit gesetzter indicatoron-Option