Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Input error correction.
#5
I took the liberty and rewrote your code a little

import tkinter as tk
from tkinter.messagebox import showerror, showinfo
from datetime import datetime

class Action:
    '''
        Action class handles all data manipulations and validations
    '''
    def calculate(self, start, end):
        '''
            Calculate time difference
        '''
        
        # Set format
        fmt = '%H:%M'

        # Use try block to get the calculations and return total. If we get a ValueError return False
        try:
            tdelta = datetime.strptime(end, fmt) - datetime.strptime(start, fmt)
            return tdelta

        except ValueError:
            return False


class Window:
    '''
        Window class handles the window display and presentation
    '''
    def __init__(self, parent):
        self.parent = parent
        parent.columnconfigure(0, weight=1)
        parent.rowconfigure(0, weight=1)
        parent['padx'] = 4
        parent['pady'] = 4
        parent.geometry('300x170+300+300')
        parent.resizable(False, False)
        parent.title('Time Clock')

        container = tk.Frame(parent)
        container['padx'] = 4
        container['pady'] = 4
        container['highlightbackground'] = '#999999'
        container['highlightcolor'] = '#999999'
        container['highlightthickness'] = 1
        container.grid(column=0, row=0, sticky='news')
        container.grid_columnconfigure(0, weight=1)
        container.grid_columnconfigure(1, weight=3)

        label = tk.Label(container, bg='#fffccc')
        label['text'] = 'Time Clock'
        label['fg'] = 'navy'
        label['font'] = ('verdana', 25, 'bold')
        label.grid(column=0, columnspan=2, row=0, sticky='new')

        label = tk.Label(container, text='Clock In:', anchor='w')
        label.grid(column=0, row=1, sticky='new', padx=1, pady=5)

        label = tk.Label(container, text='Clock out:', anchor='w')
        label.grid(column=0, row=2, sticky='new', padx=1, pady=5)

        self.in_entry = tk.Entry(container)
        self.in_entry.grid(column=1, row=1, sticky='new', padx=1, pady=5)

        self.out_entry = tk.Entry(container)
        self.out_entry.grid(column=1, row=2, sticky='new', padx=1, pady=5)

        self.button = tk.Button(container, text='Calculate', cursor='hand2')
        self.button.grid(column=0, columnspan=2, row=3, sticky='e', padx=1, pady=4)


class Controller:
    '''
        Controller class handles communication between the window and action classes
    '''
    def __init__(self, action, window):
        self.action = action 
        self.window = window

        # Set the command for the window button
        self.window.button['command'] = self.calculate

    def calculate(self):
        '''
            Method for calling the calculation function in action class
        '''

        # Grab the entry fields from window class
        start = self.window.in_entry.get().strip()
        end = self.window.out_entry.get().strip()

        # Set and call the calculate method in action class
        validate = self.action.calculate(start, end)

        # If entries are valid show total hours else show error
        if validate:
            showinfo('Time Calculated', f'Total Hours: {validate}')
        else:
            showerror('Error!', 'Please ensure you are entering the correct time format. Uses 24 hour format. An example would be 14:30 = 2:30 pm')
            

if __name__ == '__main__':
    root = tk.Tk()
    controller = Controller(Action(), Window(root))
    root.mainloop()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply


Messages In This Thread
Input error correction. - by shakoun - May-30-2024, 08:51 AM
RE: Input error correction. - by Gribouillis - May-30-2024, 09:10 AM
RE: Input error correction. - by shakoun - Jun-07-2024, 10:00 AM
RE: Input error correction. - by menator01 - Jun-07-2024, 11:26 AM
RE: Input error correction. - by menator01 - Jun-07-2024, 12:59 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Error in Using INPUT statement gunwaba 1 2,239 Jul-03-2022, 10:22 PM
Last Post: deanhystad
Star I'm getting syntax error while using input function in def. yecktmpmbyrv 1 2,095 Oct-06-2021, 09:39 AM
Last Post: menator01
  output correction using print() function afefDXCTN 3 11,438 Sep-18-2021, 06:57 PM
Last Post: Sky_Mx
  Pyspark SQL Error - mismatched input 'FROM' expecting <EOF> Ariean 3 48,662 Nov-20-2020, 03:49 PM
Last Post: Ariean
  EOF error while taking input ShishirModi 1 2,696 Sep-27-2020, 11:28 AM
Last Post: jefsummers
  Input Error Dream 2 2,575 Jul-12-2020, 05:41 PM
Last Post: bowlofred
  Getting an error while using input function dcsethia 5 3,113 May-11-2020, 04:59 PM
Last Post: buran
  Spelling correction jareyesluengo 0 1,502 Apr-07-2020, 02:44 PM
Last Post: jareyesluengo
  catch input type error mcmxl22 5 3,267 Aug-11-2019, 07:33 AM
Last Post: wavic
  inserting input gives me error message RubberNuggets 3 2,730 Jan-15-2019, 06:17 PM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020