Untitled

 avatar
unknown
plain_text
2 months ago
1.7 kB
1
Indexable
import tkinter as tk
from tkinter import messagebox

class CalculatorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Calculator")
        self.root.geometry("300x400")
        self.root.resizable(False, False)

        self.expression = ""

        self.display = tk.Entry(root, font=("Arial", 20), bd=10, insertwidth=2, width=14, borderwidth=4, justify="right")
        self.display.grid(row=0, column=0, columnspan=4)

        self.create_buttons()

    def press(self, key):
        if key == "C":
            self.expression = ""
        elif key == "=":
            try:
                self.expression = str(eval(self.expression))
            except Exception as e:
                messagebox.showerror("Error", "Invalid Input")
                self.expression = ""
        else:
            self.expression += str(key)
        self.update_display()

    def update_display(self):
        self.display.delete(0, tk.END)
        self.display.insert(0, self.expression)

    def create_buttons(self):
        buttons = [
            ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
            ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
            ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
            ('C', 4, 0), ('0', 4, 1), ('=', 4, 2), ('+', 4, 3),
        ]

        for (text, row, col) in buttons:
            button = tk.Button(
                self.root, text=text, padx=20, pady=20, font=("Arial", 14),
                command=lambda t=text: self.press(t)
            )
            button.grid(row=row, column=col, sticky="nsew")

if __name__ == "__main__":
    root = tk.Tk()
    app = CalculatorApp(root)
    root.mainloop()
Leave a Comment