Zahlen eingeben Entry field

Fragen zu Tkinter.
Antworten
neuron
User
Beiträge: 5
Registriert: Dienstag 4. April 2017, 18:54

Code: Alles auswählen

import Tkinter as tk

def button_action():
    i = float(entryfield.get())
    j = float(entryfield1.get())
    
    preis = i
    rabatt = j

    if (preis =="") and (rabatt == ""):
        welcome_label.config(text="Gebe bitte einen Wert ein!")
    

    else:    
        result =preis - preis/100*rabatt // muss irgendwie in string konvertiert werden
           
            
        
    
        welcome_label.config(text="Der neue preis ist " + result)

fenster = tk.Tk()
fenster.title(" Rabattrechner")
Lable1 = tk.Label(fenster,text = "Preis:")
Lable2 = tk.Label(fenster,text = "Prozent:")


entryfield=tk.Entry(fenster,bd=5,width=40)
entryfield1=tk.Entry(fenster,bd=5, width=40)
welcome_label = tk.Label(fenster)
exit_button = tk.Button(fenster, text= "Beenden",command=fenster.quit)
Lable1.pack()
Lable2.pack()
entryfield.pack()
entryfield1.pack()
welcome_label.pack()
exit_button.pack()
welcome_button = tk.Button(fenster,text = "Berechne", command = button_action)
welcome_button.pack()
fenster.mainloop()
Ich habe folgenden Code für einen Rabatt Rechner in python als Übung geschrieben, da ich vorher noch nie GUI programmiert habe.
Das Problem liegt wahrscheinlich in den verschiedenen Datentypen, da mit Entry ja eigentlich strings eingelesen werden. Ich möchte einen Rabatt rechner mit zwei entry Feldern schreiben, der mir als labeltext dann das ergebnis ausgibt. Bin dankbar für jeden tipp.
Vielen Dank im Voraus :)
Zuletzt geändert von Anonymous am Dienstag 4. April 2017, 19:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@neuron: was ist denn nun Dein konkretes Problem?

Für was sind die Variablen i und j gut, wenn Du sie gleich anderen Variablen zuweist? Die If-Abfrage versucht eine Zahl mit einem String zu vergleichen, was nie erfolgreich sein wird. Die Umwandlung in einen String macht man am besten über format: »"Der neue preis ist {:.2f}".format(result)«
neuron
User
Beiträge: 5
Registriert: Dienstag 4. April 2017, 18:54

Danke!
Jetzt funktionierts :)
Noch eine Frage: Wie kann ich es schreiben, dass das Fenster geschlossen wird, wenn ich das Programm beende und wie kann ich die if bedingung formulieren wenn eines der Felder leer ist und ein Wert eingegeben werden soll?
BlackJack

@neuron: Das Fenster schliesst sich automatisch wenn das Programm endet, denn wenn das Fenster noch offen ist, kann sich das Programm ja noch nicht beendet haben.

Leere Felder sind keine Frage einer ``if``-Bedingung. Hier würde die Umwandlung eines leeren Feldes, oder eines das keine Darstellung einer Gleintkommazahl enthält, zu einer Ausnahme führen. Die kann man entsprechend mit ``try``/``except KonkreteAusnahme:`` behandeln.
Antworten