Radiobutton funktionieren in Klasse nicht

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
Gerry
User
Beiträge: 3
Registriert: Dienstag 1. Oktober 2019, 12:47

Im 1. Beispiel funktionieren die Radio-Buttons korrekt. Wenn das Beispiel in eine Klasse übertragen wird und aus einem Menü aufgerufen wird funktioniert es nicht. Die Funktion Click gibt immer den Wert 0 zurück. Kann jemand helfen?

1. Beispiel:

from tkinter import *

fenster2 = Tk()
fenster2.title('Radio')
fenster2.geometry('420x225')

# Rahmen Radiobutton
rahmen = Frame(fenster2)
rahmen.place(x=5, y=5, width=310, height=180)

def Click():
anzeige = str(wert.get()) + ' Liter'
labelText.config(text=anzeige)

def callback(*args): # Funktion wird aufgerufen wenn wert wechselt
print(wert.get()) #

wert = IntVar()

# Radiobutton
radiobutton1 = Radiobutton(rahmen, anchor='w', text='kleine Menge', value=2, variable=wert, command=Click)
radiobutton1.place(x=5, y=30, width=100, height=20)

radiobutton2 = Radiobutton(rahmen, anchor='w', text='mittlere Menge', value=3, variable=wert, command=Click)
radiobutton2.place(x=5, y=50, width=100, height=20)

radiobutton3 = Radiobutton(rahmen, anchor='w', text='grosse Menge', value=5, variable=wert, command=Click)
radiobutton3.place(x=5, y=70, width=100, height=20)

radiobutton1.select()

# Label Text
labelText = Label(rahmen, text=str(wert.get()) + ' Liter')
labelText.place(x=5, y=5, width=100, height=20)

wert.trace('w', callback) # Wird aufgerufen wenn wert wechselt

fenster2.mainloop()

2. Beispiel:

Erst das Menü:

from tkinter import *
from radio import *

def radio():
app=radio=Radio()
app.radio()

fenster=Tk()
fenster.geometry("850x850")
fenster.title("Beispiel-Menue")

rahmen=Frame(fenster, relief="ridge", borderwidth=5)
rahmen.pack(fill="both", expand=1)

menubar = Menu(fenster)

dateimenu = Menu(menubar, tearoff=0)
dateimenu.add_command(label="Radio- Checkbutton", command=radio)
dateimenu.add_separator()
dateimenu.add_command(label="Ende", command=fenster.quit)

menubar.add_cascade(label="Datei", menu=dateimenu)

fenster.config(menu=menubar)
fenster.mainloop()

Dann das 1. Beispiel in der Klasse Radio:

from tkinter import *

class Radio():
def radio(self):

fenster2 = Tk()
fenster2.title('Radio')
fenster2.geometry('420x225')

# Rahmen Radiobutton
rahmen = Frame(fenster2)
rahmen.place(x=5, y=5, width=310, height=180)

def Click():
anzeige = str(wert.get()) + ' Liter'
labelText.config(text=anzeige)

def callback(*args): # Funktion wird aufgerufen wenn wert wechselt
print(wert.get()) #

wert = IntVar()

# Radiobutton
radiobutton1 = Radiobutton(rahmen, anchor='w', text='kleine Menge', value=2, variable=wert, command=Click)
radiobutton1.place(x=5, y=30, width=100, height=20)

radiobutton2 = Radiobutton(rahmen, anchor='w', text='mittlere Menge', value=3, variable=wert, command=Click)
radiobutton2.place(x=5, y=50, width=100, height=20)

radiobutton3 = Radiobutton(rahmen, anchor='w', text='grosse Menge', value=5, variable=wert, command=Click)
radiobutton3.place(x=5, y=70, width=100, height=20)

radiobutton1.select()

# Label Text
labelText = Label(rahmen, text=str(wert.get()) + ' Liter')
labelText.place(x=5, y=5, width=100, height=20)

wert.trace('w', callback) # Wird aufgerufen wenn wert wechselt

fenster2.mainloop()
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Hey, beim Import von Modulen sollte man * - Importe vermeiden, da es sonst zu Namenskollisionen kommen kann. Überlicherweise wird Tkinter so importiert: "import tkinter as tk". Bitte auch beim nächsten Mal die Code Tags </> im vollständigen Editor verwenden (oder ggf. oben anpassen), da sonst die Einrückung verloren geht und wir nur raten können bzw. es uns das Nachvollziehen des Fehlers erschwert, wenn wir kein laufbaren Code haben. String bastelt man nicht so zusammen:

Code: Alles auswählen

anzeige = str(wert.get()) + ' Liter'
so würde ich das machen:

Code: Alles auswählen

anzeige = f"{wert.get()} Liter"
Glaube auch da fehlt noch ein paar mal "self" in deinem Code und darum gibt er immer ein Null zurück, bin mir aber nicht sicher, da ich mit GUI Programmierung selber noch fast nichts gemacht habe.
Antworten