Add calculator project
This commit is contained in:
parent
81e279e30a
commit
bd197dc519
184
python-ofensivo/10_calculadora/calculadora.py
Normal file
184
python-ofensivo/10_calculadora/calculadora.py
Normal file
@ -0,0 +1,184 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Calculadora
|
||||
"""
|
||||
|
||||
import tkinter as tk
|
||||
|
||||
|
||||
class Calculadora:
|
||||
"""
|
||||
Clase calculadora
|
||||
"""
|
||||
|
||||
def __init__(self, master):
|
||||
|
||||
self.master = master
|
||||
self.display = tk.Entry(
|
||||
master, width=20, font=("Arial", 23), justify="right",
|
||||
bd=10, insertwidth=1, bg="#6495DE"
|
||||
)
|
||||
self.display.grid(row=0, column=0, columnspan=4)
|
||||
self.op_verification = False
|
||||
self.current = ''
|
||||
self.op = ''
|
||||
self.total = 0
|
||||
|
||||
row = 1
|
||||
col = 0
|
||||
|
||||
buttons = [
|
||||
"7", "8", "9", "/",
|
||||
"4", "5", "6", "*",
|
||||
"1", "2", "3", "-",
|
||||
"C", "0", ".", "+",
|
||||
"="
|
||||
]
|
||||
|
||||
for button in buttons:
|
||||
|
||||
self.build_button(button, row, col)
|
||||
|
||||
col += 1
|
||||
|
||||
if col > 3:
|
||||
|
||||
col = 0
|
||||
row += 1
|
||||
|
||||
if row == 5:
|
||||
col += 2
|
||||
|
||||
self.master.bind("<Key>", self.key_press)
|
||||
|
||||
def key_press(self, event):
|
||||
|
||||
key = event.char
|
||||
|
||||
if key in "0123456789.+-*/":
|
||||
|
||||
self.click(key)
|
||||
|
||||
elif key == "\r":
|
||||
|
||||
self.calculate()
|
||||
|
||||
elif key == "\x08":
|
||||
|
||||
self.clear_display()
|
||||
|
||||
elif key == "\x1b":
|
||||
|
||||
self.master.quit()
|
||||
return
|
||||
|
||||
else:
|
||||
|
||||
print(f"\n[+] Tecla presionada: {key}")
|
||||
print(f"[+] Valor actual: {self.current}")
|
||||
print(f"[+] Verificación de operador: {self.op_verification}")
|
||||
print(f"[+] Operador: {self.op}")
|
||||
print(f"[+] Total: {self.total}")
|
||||
|
||||
def clear_display(self):
|
||||
|
||||
self.display.delete(0, tk.END)
|
||||
self.op_verification = False
|
||||
self.current = ''
|
||||
self.op = ''
|
||||
self.total = 0
|
||||
|
||||
def calculate(self):
|
||||
|
||||
if self.current and self.op:
|
||||
|
||||
if self.op == "+":
|
||||
|
||||
self.total += float(self.current)
|
||||
|
||||
elif self.op == "-":
|
||||
|
||||
self.total -= float(self.current)
|
||||
|
||||
elif self.op == "*":
|
||||
|
||||
self.total *= float(self.current)
|
||||
|
||||
elif self.op == "/":
|
||||
|
||||
self.total /= float(self.current)
|
||||
|
||||
self.display.delete(0, "end")
|
||||
self.display.insert(tk.END, round(self.total, 3))
|
||||
|
||||
return self.total
|
||||
|
||||
def click(self, key):
|
||||
|
||||
if self.op_verification:
|
||||
|
||||
self.op_verification = False
|
||||
|
||||
self.display.insert(tk.END, key)
|
||||
|
||||
if key in "0123456789" or key == ".":
|
||||
|
||||
self.current += key
|
||||
|
||||
else:
|
||||
|
||||
if self.current:
|
||||
|
||||
if not self.op:
|
||||
|
||||
self.total = float(self.current)
|
||||
|
||||
self.current = ''
|
||||
|
||||
self.op_verification = True
|
||||
self.op = key
|
||||
|
||||
print(f"\n[+] Tecla presionada: {key}")
|
||||
print(f"[+] Valor actual: {self.current}")
|
||||
print(f"[+] Verificación de operador: {self.op_verification}")
|
||||
print(f"[+] Operador: {self.op}")
|
||||
print(f"[+] Total: {self.total}")
|
||||
|
||||
def build_button(self, button, row, col):
|
||||
|
||||
if button == "C":
|
||||
|
||||
b = tk.Button(
|
||||
self.master, text=button,
|
||||
width=3,
|
||||
font=("Arial", 23),
|
||||
command=lambda: self.clear_display()
|
||||
)
|
||||
|
||||
elif button == "=":
|
||||
|
||||
b = tk.Button(
|
||||
self.master, text=button,
|
||||
width=8, height=2,
|
||||
font=("Arial", 23),
|
||||
command=lambda: self.calculate()
|
||||
)
|
||||
|
||||
else:
|
||||
|
||||
b = tk.Button(
|
||||
self.master, text=button,
|
||||
width=3,
|
||||
font=("Arial", 23),
|
||||
command=lambda: self.click(button)
|
||||
)
|
||||
|
||||
b.grid(row=row, column=col, columnspan=2 if row == 5 else 1)
|
||||
|
||||
|
||||
root = tk.Tk()
|
||||
root.title("Calculadora")
|
||||
root.resizable(width=False, height=False)
|
||||
my_gui = Calculadora(root)
|
||||
|
||||
root.mainloop()
|
Loading…
Reference in New Issue
Block a user