Radiobutton: Variable gibt falschen Wert zurück

Fragen zu Tkinter.
Antworten
paddg 42
User
Beiträge: 9
Registriert: Montag 23. November 2009, 17:27

In meinem Programm will ich den Status der Radiobutton zurück geben lassen. Wenn ich den folgenden code Ausführe funktioniert dies auch:

Code: Alles auswählen

import tkinter

class Radiobuttons(tkinter.Frame):
    def __init__(self, master=None):
        tkinter.Frame.__init__(self, master)
        self.master=master
        self.pack()
        self.widgets_start()
    def proof(self):
        print(self.status.get())
    def widgets_start(self):
        self.status=tkinter.IntVar()
        self.status.set(1)
        for i in range(10):
            rb=tkinter.Radiobutton(self,text=str(i),value=i,variable=self.status,command=self.proof)
            rb.pack(anchor="w")
            if i==int(self.status.get()):
                rb.select()
def start():
    window=Radiobuttons(tkinter.Tk())
    window.mainloop()
start()
Wenn ich aber das Programm aus einem Tkinter-Fenster starte, wird nur der Anfangswert der Variablen (also 1) zurückgegeben, nicht der momentane Status.
Der folgende Code soll statt Zeile 22 stehen:

Code: Alles auswählen

main=tkinter.Tk()
button=tkinter.Button(main,text="Fenster öffnen",command=start)
button.pack()
main.mainloop()
Ist mein Code irgendwie falsch oder wieso funktioniert er nicht richtig?
problembär

Schätze, es ist nicht ok, zwei Mainloops zu haben. Nutze tkinter.Toplevel.

Gruß
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo paddg 42

So geht es:

Code: Alles auswählen

import tkinter

class Radiobuttons(tkinter.Frame):

    def __init__(self, master=None):
        tkinter.Frame.__init__(self, master)
        self.master=master
        self.pack()
        self.widgets_start()

    def proof(self):
        print(self.status.get())

    def widgets_start(self):
        self.status=tkinter.IntVar()
        self.status.set(1)
        for i in range(10):
            rb=tkinter.Radiobutton(self, text=str(i), value=i,
                variable=self.status, command=self.proof)
            rb.pack(anchor="w")
            if i==int(self.status.get()):
                rb.select()
def start():
    radio_button_window = tkinter.Toplevel()
    radio_buttons = Radiobuttons(radio_button_window)

main=tkinter.Tk()

button=tkinter.Button(main, text="Fenster öffnen", command=start)
button.pack()

main.mainloop()
Wie schon problembär erwähnte 'Toplevel' ist die Lösung.

Gruss wuf :wink:
Take it easy Mates!
paddg 42
User
Beiträge: 9
Registriert: Montag 23. November 2009, 17:27

Danke für die Antworten. Ich werds mit Toplevel versuchen.
Antworten