Die Differenz zwischen Zwei Uhrzeiten

Fragen zu Tkinter.
Antworten
LordArtorias
User
Beiträge: 2
Registriert: Donnerstag 25. Februar 2016, 14:59

Donnerstag 25. Februar 2016, 15:10

Hallo,
ich bin noch realtiv neu in Python und auch mit Tkinter auch noch nicht sooo bewandert und ich hoffe ihr könnt mir bei meinem Problem Helfen.
Ich bin hab angefangen ein kleines Tool für mich zu schreiben um die differenz zwischen zwei Uhrzeiten berechnen zu können. Soweit so gut jetzt weiß ich aus PHP das es dort Eingabefelder mit dem Typ "date" gibt mit denen man das relativ einfach machen kann.
Bei Python und Tkinter hab ich da leider noch nichts gefunden. Außer die Funktionen, die gleich ganze Daten einlesen. Die Eingabe wird ja aber nur z.B.
Start: 22:00
Ende 08:00
Dann sollte als Differenz logischerweise 10 Stunden sein.

Hier mal mein Code:

Code: Alles auswählen

from tkinter import *

def buttonBerechnenClick():
    # Übernahme der Daten
    start = entrystart.get()
    ende = entryende.get()
    # Verarbeitung der Daten
    differenz = str(ende-start)
    # Anzeige der Daten
    labelDifferenz.config(text=differenz)

# Fenster
tkFenster = Tk()
tkFenster.title('Zeitdifferenz berechnen')
tkFenster.geometry('258x195')

labelstart = Label(master=tkFenster, bg='#FFCFC9', text='Start:')
labelstart.place(x=54, y=24, width=100, height=27)

entrystart = Entry(master=tkFenster, bg='white')
entrystart.place(x=164, y=24, width=40, height=27)

labelende = Label(master=tkFenster, bg='#FFCFC9', text='Ende')
labelende.place(x=54, y=64, width=100, height=27)

entryende = Entry(master=tkFenster, bg='white')
entryende.place(x=164, y=64, width=40, height=27)

buttonBerechnen = Button(master=tkFenster, bg='#FBD975', text='Berechnen', command=buttonBerechnenClick)
buttonBerechnen.place(x=54, y=104, width=100, height=27)

labelDifferenzWert = Label(master=tkFenster, bg='#D5E88F', text='Differenz:')
labelDifferenzWert.place(x=54, y=144, width=100, height=27)
labelDifferenz = Label(master=tkFenster, bg='gray', text='')

labelDifferenz.place(x=164, y=144, width=40, height=27)
tkFenster.mainloop()
Hat jemand eine Lösung für mich? Wie ich das machen kann?
BlackJack

Donnerstag 25. Februar 2016, 15:54

@LordArtorias: Tk ist da ziemlich rudimentär. Wenn Du Eingabeelemente für Datums-/Zeitangaben brauchst, musst Du die in Tk selber schreiben, oder ein GUI-Rahmenwerk verwenden das solche Eingabeelemente bereits besitzt.

Du könntest/müsstest die Eingaben in Deinem bisherigen Quelltext halt selbst parsen und beispielsweise `datetime.time`- beziehungsweise `datetime.datetime`-Exemplare erstellen. Oder Du musst die Rechnungen selber durchführen. Du bekommst von den Eingabeelementen Zeichenketten, die musst Du entsprechend umwandeln.

Zum Quelltext: Sternchenimporte sind Böse™. Gerade bei `tkinter` holt man sich fast 200 Namen in das Modul von denen man nur einen Bruchteil benötigt. Man sieht bei Sternchenimporten schlechter wo eigentlich welcher Name herkommt und es besteht die Gefahr von Namenskollisionen.

Die Namenschreibweisen entsprechen nicht alle dem Style Guide for Python Code.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Dann kannst Du nicht mehr einfach so auf alle möglichen Variablen auf ”magische” Weise in der ”Funktion” zugreifen. Das ist unübersichtlich und schafft undurchsichtige Abhängigkeiten für die ”Funktion”. Werte (ausser Konstanten) sollten Funktionen und Methoden als Argumente betreten und gegebenfalls als Rückgabewerte verlassen.

Bei GUI-Programmierung kommst Du um objektorientierte Programmierung (OOP) nicht herum. Jedenfalls nicht wenn man das Programm am Ende auch verstehen und nachvollziehen können soll.

Man sollte weder Fenstergrössen, noch Position und Grösse von GUI-Elementen fest vorgeben. Also kein `place()` verwenden. Sonst ist die GUI nicht portabel sondern sieht nur auf Rechnern die ähnliche Rahmenbedingungen wie der auf dem man das erstellt hat. Und wenn man Pech hat wird das Programm auf anderen Rechnern sogar unbedienbar.
LordArtorias
User
Beiträge: 2
Registriert: Donnerstag 25. Februar 2016, 14:59

Donnerstag 25. Februar 2016, 16:22

Erst mal danke für die lange Antwort :) Ich hab Python hauptsächlich über den Kurs auf Codecademy gelernt. Und alles was ich über Tkinter weiß größten Teils zusammen gegooglet. Hättest du vielleicht ein gutes Tutorial das ich Nutzen kann?

Ich versuch dann mal den Code anzupassen ;)
BlackJack

Donnerstag 25. Februar 2016, 16:51

@LordArtorias: Für Tkinter weiss ich jetzt so auf Anhieb kein Tutorial. Die Dokumentation zu dem Modul enthält ein paar Links, allerdings grösstenteils eher Referenzdokumentation.

Für Python gibt's ein Tutorial in der Python-Dokumentation.
Antworten