Wie kann ich in Python (Tkinter) vers. Buttons eine Varaible ändern lassen?
Hallo Leute!!
Also als erstes möchte ich darauf hinweisen, dass ich ein totaler Anfänger bin...D.h. dass ich evtl. auch ziemlich "blöde" Fehler mache/gemacht habe...;D
Jetzt zu meinem Problem: Also ich wollte in Python mit Tkinter ein Radiobutton erstellen, der einen bestimmten Wert (in diesem Fall der Wert 2) in eine Variable speichert.... Das hat aber nicht ganz geklappt...;D Ich habe da ein bisschen was ausprobiert, aber es kommt nicht das gewünschte Ergebniss raus.. Vielleicht ist mein Lösungsansatz auch total falsch...
Also erstmal das Programm:
from tkinter import *
main = Tk()
Material = IntVar()
Material.set(1)
#Funktion der Buttons (Ende)
def ende():
main.destroy()
#Elemente/Objekte
lb = Label(main, text = "Hier koennen Sie das Material fuer den Boden Ihres Hauses auswaehlen...")
RButton_Stein = Radiobutton(main, text="Stein", variable=Material, value="2")
Button_Ende = Button(main, text = "Auswaehlen", command = ende)
#Anzeigen der Elemente/Objekte
lb.pack()
RButton_Stein.pack()
Button_Ende.pack()
#Endlosschleife
main.mainloop()
print(Material)
Und jetzt die Ausgabe (Shell):
PY_VAR0
Aber eigentlich sollte jetzt in der Variable der Wert 2 stehen...Müsste da dann nicht statt "PY_VAR0" der Wert 2 ausgegeben werden??
Kann mir jemand sagen, was ich falsch mache bzw. wie ich das lösen kann??
Vielen Dank schonmal ;D
1 Antwort
Radio Buttons sind nur als Gruppe sinnvoll. Dein einsames Exemplar würde Material="2" setzen, wenn er angeklickt wird.
Allerdings definierst Du Material als IntVar() und setzt sie auf 1. Der Button wird also erst mal nicht aktiv sein.
Die Ausgabe PY_VAR0 weckt in mir folgende Vermutungen:
Du hast den Button gar nicht angeklickt
die Zuweisung des Strings "2" erzeugt einen Fehler
IntVar.__str__() gibt nur den Namen der Variable aus. Für ihren Wert brauchst Du etwas wie Material.getValue()
Ich hab' kurz nachgeschaut:
* Ich empfehle die Schreibweise Radiobutton(..., value=2) ohne Anführungszeichen. Auch wenn's mit einem String "2" klappt, ist das unnötig und verwirrt nur.
Sollte value="1+1" oder value="zwei" deiner Meinung nach auch funktionieren?
* Eine IntVar hat einen Wert und einen Namen. Letzteren kannst Du im Konstruktor angeben: Material=IntVar(name="Jonas"). Keine Ahnung, wozu der gut ist. Wenn kein Name angegeben wird, heißt sie "PY_VAR0", die nächste dann "PY_VAR1" usw.
* print() behandelt nur Strings. Gibst Du ein Objekt an, wird das in einen String umgewandelt. Bei IntVar läuft das auf den Namen der Variablen hinaus (so wurde es eben programmiert).
Also: print( Material ) ⇒ "PY_VAR0" (oder eben "Jonas")
print( Material.get() ) ⇒ "2"
Alles klar?
Vielen Dank! Das hat mir sehr weitergeholfen
Alsoooo: 1. Da sollen noch ein paar Buttons hinzu kommen, allerdings wollte ich zur verdeutlichung nur ein Teil des Skriptes posten...
2. Ich habe den Button definitiv angeklickt;D
zu dem Rest kann ich leider nichts sagen, da ich nicht genau weiß, was Du meinst...;(
Sorry...
Aber trotzdem danke!!