Python icon indicating copy to clipboard operation
Python copied to clipboard

Calc.py

Open seun3-beep opened this issue 7 months ago • 1 comments

import tkinter as tk import tkinter.messagebox from tkinter.constants import SUNKEN

win = tk.Tk() win.title('Calculator')

frame = tk.Frame(win, bg="skyblue", padx=10) frame.pack()

entry = tk.Entry(frame, relief=SUNKEN, borderwidth=3, width=30) entry.grid(row=0, column=0, columnspan=3, ipady=2, pady=2)

def click(num): entry.insert(tk.END, num)

def equal(): try: res = str(eval(entry.get())) entry.delete(0, tk.END) entry.insert(0, res) except: tk.messagebox.showinfo("Error", "Syntax Error")

def clear(): entry.delete(0, tk.END)

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

for txt, r, c in buttons: tk.Button(frame, text=txt, padx=15, pady=5, width=3, command=lambda t=txt: click(t)).grid(row=r, column=c, pady=2)

tk.Button(frame, text="Clear", padx=15, pady=5, width=12, command=clear).grid(row=6, column=1, columnspan=2, pady=2) tk.Button(frame, text="=", padx=15, pady=5, width=9, command=equal).grid(row=7, column=0, columnspan=3, pady=2)

win.mainloop()

seun3-beep avatar May 08 '25 12:05 seun3-beep

import tkinter as tk
import tkinter.messagebox
from tkinter.constants import SUNKEN

class Calculator(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Calculator')
        self._build_ui()
        self._bind_keys()

    def _build_ui(self):
        self.frame = tk.Frame(self, bg="skyblue", padx=10)
        self.frame.pack()
        self.entry = tk.Entry(self.frame, relief=SUNKEN, borderwidth=3, width=30)
        self.entry.grid(row=0, column=0, columnspan=4, ipady=2, pady=2)
        self._create_buttons()

    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),
            ('0', 4, 0), ('.', 4, 1), ('%', 4, 2), ('+', 4, 3),
            ('(', 5, 0), (')', 5, 1), ('^', 5, 2),
        ]
        for (txt, r, c) in buttons:
            tk.Button(self.frame, text=txt, width=5, height=2, 
                      command=lambda t=txt: self._click(t)).grid(row=r, column=c, pady=2)
        tk.Button(self.frame, text="Clear", width=11, height=2, command=self._clear).grid(row=5, column=3, columnspan=1, pady=2)
        tk.Button(self.frame, text="=", width=23, height=2, command=self._equal).grid(row=6, column=0, columnspan=4, pady=2)

    def _click(self, char):
        self.entry.insert(tk.END, char)

    def _equal(self, event=None):
        expr = self.entry.get().replace('^', '**')
        try:
            res = str(eval(expr))
            self.entry.delete(0, tk.END)
            self.entry.insert(0, res)
        except Exception:
            tk.messagebox.showinfo("Error", "Syntax Error")

    def _clear(self, event=None):
        self.entry.delete(0, tk.END)

    def _bind_keys(self):
        for key in '0123456789+-*/().%^':
            self.bind(f'<KeyPress-{key}>', lambda e, k=key: self._click(k))
        self.bind('<Return>', self._equal)
        self.bind('<KP_Enter>', self._equal)
        self.bind('<Escape>', self._clear)
        self.bind('<BackSpace>', self._backspace)

    def _backspace(self, event=None):
        current = self.entry.get()
        if current:
            self.entry.delete(len(current)-1, tk.END)

if __name__ == '__main__':
    Calculator().mainloop()

syedshayanshahid avatar May 31 '25 17:05 syedshayanshahid

Hi! I’m trying to locate Calc.py, was this file renamed, moved, or deleted? Could you point me to the branch/path where it's located?

khushipy avatar Jun 18 '25 14:06 khushipy

Do you Add this py file?

lighting9999 avatar Jul 06 '25 06:07 lighting9999

i have the correct code, not yet opened a PR as i couldn't find the Calc.py file, so if i need to add it then i will sure!

khushipy avatar Jul 11 '25 18:07 khushipy

This is math?

lighting9999 avatar Jul 12 '25 09:07 lighting9999

I guess it should come under math only! am not sure

khushipy avatar Jul 12 '25 17:07 khushipy

import tkinter as tk from tkinter import messagebox from tkinter.constants import SUNKEN

win = tk.Tk() win.title('Calculator')

frame = tk.Frame(win, bg="skyblue", padx=10) frame.pack()

entry = tk.Entry(frame, relief=SUNKEN, borderwidth=3, width=30) entry.grid(row=0, column=0, columnspan=3, ipady=2, pady=2)

def click(num): entry.insert(tk.END, num)

def equal(): try: res = str(eval(entry.get())) entry.delete(0, tk.END) entry.insert(0, res) except: messagebox.showinfo("Error", "Syntax Error")

def clear(): entry.delete(0, tk.END)

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

for txt, r, c in buttons: tk.Button(frame, text=txt, padx=15, pady=5, width=3, command=lambda t=txt: click(t)).grid(row=r, column=c, pady=2)

tk.Button(frame, text="Clear", padx=15, pady=5, width=12, command=clear).grid(row=6, column=1, columnspan=2, pady=2) tk.Button(frame, text="=", padx=15, pady=5, width=9, command=equal).grid(row=7, column=0, columnspan=3, pady=2)

win.mainloop()

adityakaldate21-dev avatar Jul 29 '25 12:07 adityakaldate21-dev

interested to work on this project

adityakaldate21-dev avatar Aug 05 '25 12:08 adityakaldate21-dev

Python code for Calculator https://github.com/Ak10604/Tkinter-Python-Projects for original repo

calculator.py

import tkinter as tk

def evaluate_expression(event=None):  
    try:
        result = eval(display.get())
        display.delete(0, tk.END)
        display.insert(0, str(int(result)) if result.is_integer() else str(result))
    except Exception:
        display.delete(0, tk.END)
        display.insert(0, "Error")

def clear_display(event=None):
    display.delete(0, tk.END)


def button_click(value):
    current = display.get()
    display.delete(0, tk.END)
    display.insert(0, current + value)

def key_input(event):
    key = event.char
    if key.isdigit() or key in "+-*/.":
        current = display.get()
        display.delete(0, tk.END)
        display.insert(0, current + key)
    elif key == "\r":  
        evaluate_expression()
    elif key == "\x08": 
        current = display.get()[:-1]
        display.delete(0, tk.END)
        display.insert(0, current)
    return "break" 
root = tk.Tk()
root.title("Simple Calculator")
root.geometry("300x400")
root.resizable(False, False)

display = tk.Entry(root, font=("Arial", 20), borderwidth=5, relief="sunken", justify="right")
display.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
display.bind("<Key>", key_input)  

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:
    if text == "=":
        btn = tk.Button(root, text=text, font=("Arial", 16), bg="lightgreen", command=evaluate_expression)
    elif text == "C":
        btn = tk.Button(root, text=text, font=("Arial", 16), bg="red", command=clear_display)
    else:
        btn = tk.Button(root, text=text, font=("Arial", 16), command=lambda value=text: button_click(value))
    
    btn.grid(row=row, column=col, sticky="nsew", padx=5, pady=5)

for i in range(5):
    root.grid_rowconfigure(i, weight=1)
for j in range(4):
    root.grid_columnconfigure(j, weight=1)

root.bind("<Return>", evaluate_expression)

root.bind("<Escape>", clear_display)      

root.mainloop()

Ak10604 avatar Sep 22 '25 21:09 Ak10604