@Axel-Erfurt: Variablennamen sollten aussagekräftig sein. Was hast Du Dir dabei gedacht die Länge eines Strings `var_1` zu nennen? `result` oder meintewegen `result_label` ist doch viel lesbarer als `label_4`. Weißt Du welchen Wert die ganzen anderen `label_x`-Variablen haben? Explizit auf »True« zu prüfen ist unnötig. Statt mit `round` zu runden, gibt man im Formatstring die Nachkommastellen an; literale Strings schreibt man direkt in den Formatstring. Eine feste Fenstergröße vorzugeben ist eine schlechte Idee; bei mir ist z.B. die Ergebniszeile halb abgeschnitten.
Um den Überblick in größeren Projekten zu behalten, darf man keine globalen Variablen benutzen. Das heißt auch, dass alles ab Zeile 44 in eine Funktion gehört und um die ganzen Entry-Variablen in die Funktionen zu bekommen, müßte man eigentlich auch eine Klasse mit Methoden schreiben. Scheinbar hattest Du auch diesen Gedanken, da alle Deine Funktionen ein nicht benutztes self-Argument haben (was eigentlich event heißen müßte, so wie sie benutzt werden).
Code: Alles auswählen
#!/usr/bin/python
# -- coding: utf-8 --
import Tkinter as tk
import tkSimpleDialog, tkMessageBox
class Verbrauchsrechner(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
tk.Label(self, text="gefahrene km").pack()
self.km = tk.Entry(self, width=10, justify="center")
self.km.pack()
self.km.bind("<Return>", self.nextfield)
tk.Label(self, text="getankte Liter").pack()
self.liter = tk.Entry(self, width=10, justify="center")
self.liter.pack()
self.liter.bind("<Return>", self.ergebnis)
tk.Label(self, text="Verbrauch:").pack()
self.result = tk.Label(self, text="", font=('', 13, "bold"))
self.result.pack()
self.km.insert(0, "112,7")
self.liter.insert(0, "6,5")
self.km.focus()
self.km.select_range(0, tk.END)
def ergebnis(self, _event):
try:
km = float(self.km.get().replace(",", "."))
liter = float(self.liter.get().replace(",", "."))
except ValueError:
self.result['text'] = "Zahl erwartet"
self.result['fg'] = "red"
else:
if km > 50:
verbrauch = liter * 100 / km
self.result['text'] = '{:.2f} Liter pro 100 km'.format(verbrauch)
self.result['fg'] = "red" if verbrauch > 6 else "green"
else:
result = tkMessageBox.askyesno("Frage", "Fahren Sie noch ein paar km weiter, bis Sie den Verbrauch ausrechnen lassen!\n\nHaben Sie noch weitere Fragen?")
if result:
tkMessageBox.showinfo("Info", "Dann machen wir hier weiter")
self.weiter()
else:
tkMessageBox.showinfo("Info", "Dann machen wir hier Schluss")
self.parent.quit()
def nextfield(self, _event):
self.liter.focus()
self.liter.select_range(0, tk.END)
def weiter(self):
# code für weiter hier
tkMessageBox.showinfo("Info", "funktioniert!")
def main():
root = tk.Tk()
root.title("Benzinverbrauch")
verbrauch = Verbrauchsrechner(root)
verbrauch.pack()
root.mainloop()
if __name__ == '__main__':
main()