import tkinter as tk from tkinter import messagebox def on_click(event): text = event.widget.cget("text") if text == "=": calculate_result() elif text == "C": clear_entry() else: entry_var.set(entry_var.get() + text) def calculate_result(event=None): try: result = eval(str(entry.get())) result = round(float(result), 2) # Format to 2 decimal places entry_var.set(f"{result:.2f}") except Exception as e: messagebox.showerror("Error", f"Invalid Expression: {e}") def clear_entry(event=None): entry_var.set("") return "break" # Prevents default behavior of inserting 'c' or 'C' # Main window root = tk.Tk() root.title("Bobs Calc") root.geometry("215x250") entry_var = tk.StringVar() entry = tk.Entry(root, textvariable=entry_var, font="Arial 20") entry.pack(fill=tk.BOTH, ipadx=8, pady=10, padx=10) entry.focus_set() # Set focus to the entry widget entry.bind("", calculate_result) # Bind Enter key to calculate_result entry.bind("", calculate_result) # Bind NumPad Enter key entry.bind("", clear_entry) # Bind 'c' key to clear_entry entry.bind("", clear_entry) # Bind 'C' key to clear_entry button_frame = tk.Frame(root) button_frame.pack() buttons = [ ["7", "8", "9", "/"], ["4", "5", "6", "*"], ["1", "2", "3", "-"], ["C", "0", "=", "+"] ] for row in buttons: row_frame = tk.Frame(button_frame) row_frame.pack(expand=True, fill="both") for btn_text in row: btn = tk.Button(row_frame, text=btn_text, font="Arial 18", relief=tk.RAISED) btn.pack(side=tk.LEFT, expand=True, fill="both") btn.bind("", on_click) root.mainloop()