from tkinter import * # Trial - Entry Validation v1 # Purpose: Learn the basic approach to checking whether a user has entered # a valid number in an Entry widget using try/except class ValidationTrial: def __init__(self): self.frame = Frame(padx=10, pady=10) self.frame.grid() self.heading = Label(self.frame, text="Entry Validation Trial - v1", font=("Arial", "16", "bold")) self.heading.grid(row=0) instructions = ("Enter different values and press Check. " "Try: a number, text, a negative number, " "a decimal, nothing.") Label(self.frame, text=instructions, wraplength=300, font=("Arial", "11"), fg="#666666").grid(row=1, pady=5) self.entry = Entry(self.frame, font=("Arial", "14"), width=20) self.entry.grid(row=2, padx=10, pady=10) self.check_button = Button(self.frame, text="Check Input", font=("Arial", "12", "bold"), bg="#009900", fg="#FFFFFF", width=12, command=self.check_input) self.check_button.grid(row=3, pady=5) self.result_label = Label(self.frame, text="", font=("Arial", "12")) self.result_label.grid(row=4, pady=10) def check_input(self): """ Validates the entry box content. Steps: 1. Read the raw string with .get() 2. Try to convert to float 3. If it fails, ValueError is raised - catch it 4. If it succeeds, check it's >= 0 """ raw = self.entry.get() # Reset styling self.entry.config(bg="#FFFFFF") try: value = float(raw) if value >= 0: # Valid! self.result_label.config( text=f"Valid number: {value}", fg="#009900" ) else: # Number but negative self.result_label.config( text="Error: number must be 0 or greater", fg="#9C0000" ) self.entry.config(bg="#F4CCCC") self.entry.delete(0, END) except ValueError: # Not a number at all self.result_label.config( text="Error: please enter a number", fg="#9C0000" ) self.entry.config(bg="#F4CCCC") self.entry.delete(0, END) # main routine if __name__ == "__main__": root = Tk() root.title("Validation Trial v1") ValidationTrial() root.mainloop()