Python
import tkinter as tk
# Global expression
expression = ""
# Update input
def update_display(value):
global expression
# Convert symbols to valid Python ops
if value == "×":
expression += "*"
elif value == "÷":
expression += "/"
else:
expression += str(value)
input_text.set(expression_display())
# Clear
def clear_display():
global expression
expression = ""
input_text.set("")
# Backspace
def backspace():
global expression
expression = expression[:-1]
input_text.set(expression_display())
# Show the expression with user-friendly symbols
def expression_display():
return expression.replace("*", "×").replace("/", "÷")
# Evaluate
def calculate():
global expression
try:
result = str(eval(expression))
input_text.set(result)
expression = result
except:
input_text.set("Error")
expression = ""
# Handle keyboard
def key_event(event):
key = event.keysym
if key in "0123456789":
update_display(key)
elif key in ["plus", "KP_Add"]:
update_display("+")
elif key in ["minus", "KP_Subtract"]:
update_display("-")
elif key in ["asterisk", "KP_Multiply"]:
update_display("×")
elif key in ["slash", "KP_Divide"]:
update_display("÷")
elif key == "Return":
calculate()
elif key == "BackSpace":
backspace()
elif key == "Escape":
clear_display()
elif key == "period" or key == "KP_Decimal":
update_display(".")
# Main window
root = tk.Tk()
root.title("Modern Calculator")
root.geometry("320x450")
root.configure(bg="#1e1e1e")
root.resizable(False, False)
root.bind("", key_event)
# Display
input_text = tk.StringVar()
entry = tk.Entry(
root, textvariable=input_text,
font=("Segoe UI", 22), bg="#2e2e2e", fg="#00ffcc",
bd=0, relief=tk.FLAT, justify="right", insertbackground="#00ffcc"
)
entry.pack(expand=True, fill="both", padx=20, pady=(20, 10))
# Button frame
button_frame = tk.Frame(root, bg="#1e1e1e")
button_frame.pack(expand=True, fill="both", padx=10, pady=10)
# Button layout with ÷ and ×
buttons = [
["C", "←", "÷", "×"],
["7", "8", "9", "-"],
["4", "5", "6", "+"],
["1", "2", "3", "="],
["0", ".", "", ""]
]
# Create styled button
def create_button(text, command):
if text == "":
return tk.Label(button_frame, bg="#1e1e1e")
return tk.Button(
button_frame, text=text, command=command,
font=("Segoe UI", 16), fg="#ffffff", bg="#333333",
activebackground="#00ffcc", activeforeground="#1e1e1e",
bd=0, relief=tk.FLAT, height=2, width=5
)
# Place buttons
for r, row in enumerate(buttons):
for c, char in enumerate(row):
if char == "C":
btn = create_button("C", clear_display)
elif char == "←":
btn = create_button("←", backspace)
elif char == "=":
btn = create_button("=", calculate)
elif char:
btn = create_button(char, lambda x=char: update_display(x))
else:
btn = create_button("", None)
btn.grid(row=r, column=c, padx=5, pady=5)
# Run app
root.mainloop()