Calculator
✅ Full Working Code (Modern Calculator – Python Tkinter)
import tkinter as tk
from tkinter import font
class ModernCalculator:
def __init__(self, master):
self.master = master
master.title("✨ Modern Calculator")
master.geometry("350x550")
master.configure(bg="#1a1a2e")
master.resizable(False, False)
# Color scheme
self.colors = {
'bg': "#1a1a2e",
'display_bg': "#16213e",
'display_fg': "#00fff5",
'number_btn': "#0f3460",
'number_hover': "#e94560",
'operator_btn': "#533483",
'operator_hover': "#e94560",
'equal_btn': "#e94560",
'equal_hover': "#ff6b6b",
'clear_btn': "#c0392b",
'clear_hover': "#e74c3c",
'text_light': "#ecf0f1"
}
# Fonts
self.display_font = font.Font(family='Helvetica', size=28, weight='bold')
self.button_font = font.Font(family='Helvetica', size=16, weight='bold')
# Display Frame
display_frame = tk.Frame(master, bg="#0f0f23", padx=10, pady=10)
display_frame.grid(row=0, column=0, columnspan=4, padx=15, pady=15, sticky="nsew")
# History
self.history = tk.Label(
display_frame,
text="",
font=('Helvetica', 10),
bg=self.colors['display_bg'],
fg="#7f8c8d",
anchor='e'
)
self.history.pack(fill=tk.X)
# Display
self.display = tk.Entry(
display_frame,
font=self.display_font,
bg=self.colors['display_bg'],
fg=self.colors['display_fg'],
bd=0,
justify='right',
insertbackground=self.colors['display_fg']
)
self.display.pack(fill=tk.BOTH, expand=True, ipady=15)
# Buttons
buttons = [
('C', 1, 0, self.colors['clear_btn'], 'clear'),
('⌫', 1, 1, self.colors['clear_btn'], 'backspace'),
('%', 1, 2, self.colors['operator_btn'], 'operator'),
('÷', 1, 3, self.colors['operator_btn'], 'operator'),
('7', 2, 0, self.colors['number_btn'], 'number'),
('8', 2, 1, self.colors['number_btn'], 'number'),
('9', 2, 2, self.colors['number_btn'], 'number'),
('×', 2, 3, self.colors['operator_btn'], 'operator'),
('4', 3, 0, self.colors['number_btn'], 'number'),
('5', 3, 1, self.colors['number_btn'], 'number'),
('6', 3, 2, self.colors['number_btn'], 'number'),
('-', 3, 3, self.colors['operator_btn'], 'operator'),
('1', 4, 0, self.colors['number_btn'], 'number'),
('2', 4, 1, self.colors['number_btn'], 'number'),
('3', 4, 2, self.colors['number_btn'], 'number'),
('+', 4, 3, self.colors['operator_btn'], 'operator'),
('00', 5, 0, self.colors['number_btn'], 'number'),
('0', 5, 1, self.colors['number_btn'], 'number'),
('.', 5, 2, self.colors['number_btn'], 'number'),
('=', 5, 3, self.colors['equal_btn'], 'equal')
]
self.buttons = {}
for text, row, col, color, btype in buttons:
btn = tk.Button(
master,
text=text,
font=self.button_font,
bg=color,
fg=self.colors['text_light'],
bd=0,
width=5,
height=2,
cursor='hand2'
)
btn.grid(row=row, column=col, padx=5, pady=5, sticky="nsew")
if btype == 'number':
btn.bind('<Enter>', lambda e, b=btn: b.config(bg=self.colors['number_hover']))
btn.bind('<Leave>', lambda e, b=btn, c=color: b.config(bg=c))
elif btype == 'operator':
btn.bind('<Enter>', lambda e, b=btn: b.config(bg=self.colors['operator_hover']))
btn.bind('<Leave>', lambda e, b=btn, c=color: b.config(bg=c))
elif btype == 'equal':
btn.bind('<Enter>', lambda e, b=btn: b.config(bg=self.colors['equal_hover']))
btn.bind('<Leave>', lambda e, b=btn, c=color: b.config(bg=c))
else:
btn.bind('<Enter>', lambda e, b=btn: b.config(bg=self.colors['clear_hover']))
btn.bind('<Leave>', lambda e, b=btn, c=color: b.config(bg=c))
if text == 'C':
btn.config(command=self.clear)
elif text == '⌫':
btn.config(command=self.backspace)
elif text == '=':
btn.config(command=self.calculate)
else:
btn.config(command=lambda x=text: self.click(x))
self.buttons[text] = btn
for i in range(6):
master.grid_rowconfigure(i, weight=1)
for i in range(4):
master.grid_columnconfigure(i, weight=1)
def click(self, key):
if key == '×':
key = '*'
elif key == '÷':
key = '/'
elif key == '%':
key = '/100'
self.display.insert(tk.END, key)
def calculate(self):
try:
expr = self.display.get()
self.history.config(text=expr + " =")
result = eval(expr)
self.display.delete(0, tk.END)
self.display.insert(0, result)
except:
self.display.delete(0, tk.END)
self.display.insert(0, "Error")
def clear(self):
self.display.delete(0, tk.END)
self.history.config(text="")
def backspace(self):
self.display.delete(len(self.display.get()) - 1, tk.END)
if __name__ == "__main__":
root = tk.Tk()
ModernCalculator(root)
root.mainloop()
Calculator

