Voreinstellung Radiobutton

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RolandKM
User
Beiträge: 25
Registriert: Montag 21. Dezember 2020, 10:20

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)
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
RolandKM
User
Beiträge: 25
Registriert: Montag 21. Dezember 2020, 10:20

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)
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
RolandKM
User
Beiträge: 25
Registriert: Montag 21. Dezember 2020, 10:20

Danke für den Tipp, jetzt passt es.
Antworten