Nach dem jüngsten Python-Workshop der MakerKids im Ferienprogramm haben wir uns heute einmal ein wenig in der Bibliothek Tkinter umgesehen. Zum Einstieg in das Thema GUI (Graphical User Interface / Grafische Benutzeroberfläche) haben wir uns mit der Programmierung eines Einheiten-Umrechners beschäftigt.
Diese Basisversion, die wir sicher noch erweitern werden, findet Ihr auch zum Download in unserem GitHub-Kanal. Nachfolgend der Quelltext der Basisversion für Eure eigenen Entwicklungen und Erweiterungen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
#!/usr/bin/env python3 # -*- coding: utf8 -*- # author: MakerKids / Martino Antognini (uzh) from tkinter import * ABSOLUTER_NP_K = 0.0 # absoluter Nullpunkt in Kelvin ABSOLUTER_NP_C = -273.15 # absoluter Nullpunkt in Celsius ABSOLUTER_NP_F = -459.67 # absoluter Nullpunkt in Fahrenheit NULL_F = 32.0 # 0° C in Fahrenheit FAKTOR_F_C = 9/5 # Umrechnungsfaktor zwischen Fahrenheit und Celsius FEHLERMELDUNG_TEMP = "*** Fehler: unmögliche Temperatur! ***" # Fehlermeldung für ungültige Eingabe def button_action(): temperatur_str = eingabefeld.get() # Temperatur von Eingabefeld einlesen (Typisierung: Zeichenkette) temperatur = float(temperatur_str) # Temperatur von Zeichenkette in Gleitkommazahl umwandeln wahl = variable.get() if wahl == u1: message = temperatur_str + "° = " + str(Celsius_Kelvin(temperatur)) + "K" elif wahl == u2: message = temperatur_str + "° = " + str(Celsius_Fahrenheit(temperatur)) + "F" elif wahl == u3: message = temperatur_str + "K = " + str(Kelvin_Celsius(temperatur)) + "°" elif wahl == u4: message = temperatur_str + "K = " + str(Kelvin_Fahrenheit(temperatur)) + "F" elif wahl == u5: message = temperatur_str + "F = " + str(Fahrenheit_Celsius(temperatur)) + "°" elif wahl == u6: message = "F = " + str(Fahrenheit_Kelvin(temperatur)) + "K" ausgabe.configure(text=message) # Umrechnungsfunktionen def Celsius_Kelvin(t): if t >= ABSOLUTER_NP_C: return t - ABSOLUTER_NP_C else: raise TypeError(FEHLERMELDUNG_TEMP) def Celsius_Fahrenheit(t): if t >= ABSOLUTER_NP_C: return NULL_F + FAKTOR_F_C*t else: raise TypeError(FEHLERMELDUNG_TEMP) def Kelvin_Celsius(t): if t >= ABSOLUTER_NP_K: return t + ABSOLUTER_NP_C else: raise TypeError(FEHLERMELDUNG_TEMP) def Kelvin_Fahrenheit(t): if t >= ABSOLUTER_NP_K: return t*FAKTOR_F_C + ABSOLUTER_NP_F else: raise TypeError(FEHLERMELDUNG_TEMP) def Fahrenheit_Celsius(t): if t >= ABSOLUTER_NP_F: return (t - NULL_F)/FAKTOR_F_C else: raise TypeError(FEHLERMELDUNG_TEMP) def Fahrenheit_Kelvin(t): if t >= ABSOLUTER_NP_F: return (t - ABSOLUTER_NP_F)/FAKTOR_F_C else: raise TypeError(FEHLERMELDUNG_TEMP) fenster = Tk() # Fensterobjekt initialisieren fenster.title("Einheiten-Umwandler") # Anzeige in der Titelleiste des Fensters info = Label(fenster, justify = LEFT, font=("Helvetica", 8), text="""\ 1) Gewünschte Umrechnung wählen. 2) Temperatur eingeben. 3) Taste "Umrechnen" drücken.""") # Auswahloptionen des Optionsmenüs u1 = "Celsius -> Kelvin" u2 = "Celsius -> Fahrenheit" u3 = "Kelvin -> Celsius" u4 = "Kelvin -> Fahrenheit" u5 = "Fahrenheit -> Celsius" u6 = "Fahrenheit -> Kelvin" variable = StringVar(fenster) variable.set(u1) # voreingestellte Auswahloption optionen = OptionMenu(fenster, variable, u1, u2, u3, u4, u5, u6) optionen.configure(width = 35, font=("Helvetica", 10)) eingabefeld = Entry(fenster, bd=1, width=15) label = Label(fenster, justify = CENTER, font=("Helvetica", 12), text="Ausgabe: ", padx=0) ausgabe = Label(fenster, justify = CENTER, font=("Helvetica", 12), text=" ", width=16) run_button = Button(fenster,text="Umrechnen", font=("Helvetica", 10), width=14, command = button_action) # Positionierung der Anzeige- und Bedienelemente info.grid(row = 0, column = 0, columnspan = 2, pady = 5, padx = 50) optionen.grid(row = 1, column = 0, columnspan = 2, pady = 10) eingabefeld.grid(row = 2, column = 0, pady = 10, padx = 10) run_button.grid(row = 2, column = 1, pady = 10, padx = 10) label.grid(row = 3, column = 0, pady = 5) ausgabe.grid(row = 3, column = 1, pady = 5) fenster.mainloop() |