Calc.py
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()
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()
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?
Do you Add this py file?
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!
This is math?
I guess it should come under math only! am not sure
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()
interested to work on this project
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()