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()
Radiobutton funktionieren in Klasse nicht
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:
so würde ich das machen:
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.
Code: Alles auswählen
anzeige = str(wert.get()) + ' Liter'
Code: Alles auswählen
anzeige = f"{wert.get()} Liter"