Jun-07-2024, 12:59 PM
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
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags