Ich habe am Samstag begonnen mich mit Python zu beschäftigen und habe mir eine kleine Aufgabe gestellt. Ziel ist es für die Uni ein kurzes Programm zu schreiben, dass mir während meinen Arbeiten die ich zu erledigen habe hilft. Eigentlich ist es ganz einfach der Nutzer wird gebeten Zahlenwerte einzugeben und dann wird ein Rechenweg durchgearbeitet.
Jetzt stoße ich an ein Problem, bei dem ich nicht weiter weiß.
Code sieht wie folgt aus:
Code: Alles auswählen
from tkinter import*
root = Tk()
root.title("III",)
root.geometry("300x300")
labelwert = Label(root, text="Wert 1: ")
labelwert.place(x=10, y=10)
Wert = Entry(root, width=20, bg="lightgrey", font="arial")
Wert.place(x=70, y=10)
labelwert2 = Label(root, text="Wert 2: ")
labelwert2.place(x=10, y=30)
Wert2 = Entry(root, width=20, bg="lightgrey", font="arial")
Wert2.place(x=70, y=30)
labelwert3 = Label(root, text="Wert 3: ")
labelwert3.place(x=10, y=50)
Wert3 = Entry(root, width=20, bg="lightgrey", font="arial")
Wert3.place(x=70, y=50)
def rechnen():
ergebnis.delete(1.0,END)
try:
zahlenwerte = Wert.get()
zahlenwerte2 = Wert2.get()
zahlenwerte3 = Wert3.get()
except SyntaxError:
output.insert(END, "This is not a valid input\n")
if zahlenwerte == str(0):
result = (eval(zahlenwerte2) * eval(zahlenwerte3))
ergebnis.insert(END, str(result))
elif zahlenwerte2 == str(0):
result = (eval(zahlenwerte) * eval(zahlenwerte3))
ergebnis.insert(END, str(result))
elif zahlenwerte3 == str(0):
result = (eval(zahlenwerte) * eval(zahlenwerte2))
ergebnis.insert(END, str(result))
else:
result = (eval(zahlenwerte) * eval(zahlenwerte2) * eval(zahlenwerte3))
ergebnis.insert(END, str(result))
berechne = Button(root, bg="lightgreen", font="TimesNewRoman", text="Berechne", command=rechnen)
berechne.place(x=10,y=90, height=30, width=100,)
labelergebnis = Label(root, text="Ergebnis: ")
labelergebnis.place(x=10, y=140)
ergebnis = Text(root, width=20, bg="lightgrey", height=1)
ergebnis.place(x=70, y=140)
root.mainloop()
Nun die Probleme:
1) Ich hätte gerne, dass Entry die ich leer lasse einfach ignoriert werden, ich dachte an etwas wie if .... okay, während ich das geschrieben habe ist mir eine Idee gekommen, die ich jetzt auch eingebaut habe, jeglicher Eintrag mit 0 führt jetzt schlichtweg zu einem Rechenweg der diesen Wert nicht mit einschließt. Aber bei vielen Einträgen wird das ein riesen aufwand + man darf nicht vergessen
2) Wäre gewesen (hihihi das hab ich auch schon gefixt, während dem schreiben), dass ich das Ergebnis lösche und ein neues berechnen kann, nachdem ich neue Zahlen eingegeben hab. Nachdem ich die verschiedenen if-statements hinzugefügt hab, konnte ich den Berechnen Button unendlich oft benutzen das neue Ergebnis wurde aber einfach nur hinten dran gehängt, deswegen hab ich noch ergebnis.delete(1.0,END) davor gestellt.
Jetzt hab ich gar keine Probleme mehr sondern viel mehr fragen: wie kann ich das Entry Feld denn leer lassen (0 tuts zur Zeit auch, leer lassen ist aber schöner)
und weiters diese Zeile ergebnis.delete(1.0,END); ich hatte sie im Kopf ich dachte nur die Parameter sind (0, END) bis ich im Netz auf (1.0, END) stieß. Wieso denn bitte 1.0?
Vielleicht noch eine Frage: ergebnis.insert(END, str(result)) … dass man Information wo hineinspielen muss ist mit klar also ich füge Ergebnis, der Text Box, einen string zu dens mir dann anzeigen kann, aber wofür brauch ich den Parameter END? Ich versteh endlich den Ausdruck never touch a running system
LG
PS: haut mich nicht weil ich das .place verwende, das hab ich lieber als das grid