Seite 1 von 1

Voreinstellung Radiobutton

Verfasst: Freitag 22. Oktober 2021, 09:55
von RolandKM
Hallo,
ich möchte in einer Gruppe von 3 Radiobutton den ersten standardmäßig aktivieren. Leider gibt's eine Fehlermeldung für "rb1.select()"
Wie kann ich die Vorauswahl realisieren ?

Code: Alles auswählen

fenster = tk.Tk()
varRb = tk.IntVar()
rb1 = tk.Radiobutton(fenster, text="Leerzeichen",font=("arial",10), variable=varRb, value=1).place(x=70, y=165)
rb1.select()
rb2 = tk.Radiobutton(fenster, text="Komma",font=("arial",10), variable=varRb, value=2).place(x=70, y=185)
rb3 = tk.Radiobutton(fenster, text="Semikolon",font=("arial",10), variable=varRb, value=3).place(x=70, y=205)

Re: Voreinstellung Radiobutton

Verfasst: Freitag 22. Oktober 2021, 10:20
von __deets__
Wenn du Fehlermeldungen bekommst, die bitte posten. Denn dann muss man weniger Aufwand in die Diagnose investieren.

Und ich weiss nicht, woher ihr das immer habt. Aber dieses Verketten von Widget Objekt erzeugen und dann der Layout-Methode fuehrt hier andauernd zu diesem Problem. place() gibt None zurueck. Nicht das Widget.

Re: Voreinstellung Radiobutton

Verfasst: Freitag 22. Oktober 2021, 10:32
von Sirius3
Benutze sprechende Variablennamen, rb1 bis rb3 sind das nicht, und varRb halt auch nicht. Was ist der Inhalt dieser Variable? auswahl_trennzeichen?
Warum enthält die Variable 1, 2 oder 3? Was hat das mit Leerzeichen, Komma oder Semikolon zu tun?
Was selektiert wird, bestimmt die Variable, also setzt man auch den Wert der Variable. Damit sind die ganzen rb-Variablen überflüssig.
Man sollte nicht die explizite globale Tk-Instanz verwenden, sondern immer ein konkretes Widget beim Erzeugen angeben.
Man benutzt kein place, sondern je nachdem pack oder grid.

Code: Alles auswählen

fenster = tk.Tk()
auswahl_trennzeichen = tk.StringVar(fenster, " ")
tk.Radiobutton(fenster, text="Leerzeichen", font=("arial",10), variable=auswahl_trennzeichen, value=" ").pack(anchor=tk.W)
tk.Radiobutton(fenster, text="Komma", font=("arial",10), variable=auswahl_trennzeichen, value=",").pack(anchor=tk.W)
tk.Radiobutton(fenster, text="Semikolon", font=("arial",10), variable=auswahl_trennzeichen, value=";").pack(anchor=tk.W)
fenster.mainloop()

Re: Voreinstellung Radiobutton

Verfasst: Montag 25. Oktober 2021, 09:22
von RolandKM
Danke für die Hinweise. Ich möchte zur besseren Anordnung "grid" verwenden, aber da gibt's folgendes Problem:
Es gelingt mir nicht, die 3 Radiobutton linksbündig untereinander anzuordnen (anchor="w" scheint wirkungslos, die 3 Zeilen stehen scheinbar zentriert)

Code: Alles auswählen

import tkinter as tk
fenster = tk.Tk()
auswahl_trennzeichen = tk.StringVar(fenster, " ")
tk.Radiobutton(fenster, text="Leerzeichen", font=("arial",10), anchor="w", variable=auswahl_trennzeichen,value=" ").grid(row=0, column=0)
tk.Radiobutton(fenster, text="Komma", font=("arial",10), anchor="w", variable=auswahl_trennzeichen, value=",").grid(row=1, column=0)
tk.Radiobutton(fenster, text="Semikolon", font=("arial",10), anchor="w", variable=auswahl_trennzeichen, value=";").grid(row=2, column=0)

Re: Voreinstellung Radiobutton

Verfasst: Montag 25. Oktober 2021, 09:43
von __blackjack__
@RolandKM: Das ist die falsche Option. `anchor` bezieht sich hier auf den Text und/oder das Bild *innerhalb* des `Radiobutton`, nicht auf den `Radiobutton` selbst. Der wird ja mit `grid()` angeordnet. Da kann man mit `sticky` festlegen an welcher oder welchen Seiten der Zelle das Widget ”kleben” soll.

Code: Alles auswählen

    font = ("arial", 10)
    auswahl_trennzeichen = tk.StringVar(fenster, " ")
    for i, (text, value) in enumerate(
        [("Leerzeichen", " "), ("Komma", ","), ("Semikolon", ";")]
    ):
        tk.Radiobutton(
            fenster,
            text=text,
            font=font,
            variable=auswahl_trennzeichen,
            value=value,
        ).grid(row=i, column=0, sticky=tk.W)

Re: Voreinstellung Radiobutton

Verfasst: Montag 25. Oktober 2021, 10:18
von RolandKM
Danke für den Tipp, jetzt passt es.