Codigo para Hacer Una Calculadora en Python
Codigo para Hacer Una Calculadora en Python
Crear una calculadora en Python en 3 sencillos pasos no es tan difícil si se usa un código
limpio, la mejor forma es hacerla paso a paso para evitar los errores de sintaxis al ejecutar
el programa, el código que les compartiré es el más limpio que hay, con limpio me
refiero a que no incluye cosas extra como librerías avanzadas que les impediría entender
que hace cada parte del código, además si al final quieren incluirle algo para personalizarlo
pueden hacerlo a gusto posteriormente, este código es la base para cualquier calculadora en
Python y funciona para cualquier IDE como Pycharm, Sublimetext y Visual studio code,
entre otros.
Tras esto ya podemos crear todo el código pero entendamos primero los pasos que
haremos.
La ventana se hace con la función TK() le tenemos que dar un nombre a la variable de esta
ventana y ningún nombre más clásico que ventana, pueden ponerle el que gusten
posteriormente pero por ahora recomiendo no cambiar cosas porque luego puede no
funcionarles si olvidan cambiarlo en todos los sitios que aparece.
if __name__ == "__main__":
ventana = Tk()
ventana.configure(background="light green")
ventana.mainloop()
Como pueden ver además de crear la ventana con la función tk incluí varios parámetros
extra llamados métodos, el primero es configure donde le asigné un color al background
esto es al fondo de la ventana, pueden usar otros colores como gray, yellow, blue, red,
green y asi sucesivamente, con el método title como su nombre lo indica coloqué entre
comillas el nombre que tendrá la ventana, este es el nombre visible de nuestro programa, el
nombre también pueden cambiarlo, y es que al final la parte grafica de los programas o
aplicaciones es muy importante para que el usuario se sienta cómodo o perciba que está
haciendo uso de una aplicación seria, el método geometry básicamente sirve para dar el
tamaño en medida de pixeles a la ventana, tanto su altura como su anchura, también pueden
jugar con estos parámetros, al final le aplique a la ventana una llamada a la funcion
mainloop(), sin esto el programa si se ejecutará pero se cerraría de inmediato tan pronto
como lee el código, como su nombre lo indica mainloop sirve para crear un loop es decir un
bucle que se repite una y otra vez pasando por este código así evitaremos que nuestro
programa se cierre hasta que cerremos la ventana manualmente.
Agreguemos tres sencillas líneas de código mas que servirán para crear un campo de tipo
Entry, estos son campos donde se puede ver y escribir texto.
calculo = StringVar()
datos.grid(columnspan=10, ipadx=50)
En el código anterior la primer línea crea una variable llamada calculo, la segunda línea
crea el campo llamado datos que es donde veremos los números y las operaciones y la
tercer línea le da una ubicación con su anchura definida usando el método grid,¿fácil
verdad?.
Espero que no intentaran todavía ejecutar lo anterior porque de ser así aunque si verán la
ventana les lanzara errores por cuanto no hemos creado todavía la función digito(), pero
si ya entendieron el código anterior solo queda crear los otros botones repitiendo el
código anterior y se ve de la siguiente forma (todos los botones juntos).
boton1 = Button(ventana, text=' 1 ', fg='black', bg='white',
boton1.grid(row=2, column=0)
boton2.grid(row=2, column=1)
boton3.grid(row=2, column=2)
boton4.grid(row=3, column=0)
boton5.grid(row=3, column=1)
boton6 = Button(ventana, text=' 6 ', fg='black', bg='white',
boton6.grid(row=3, column=2)
boton7.grid(row=4, column=0)
boton8.grid(row=4, column=1)
boton9.grid(row=4, column=2)
boton0.grid(row=5, column=0)
suma.grid(row=2, column=3)
resta.grid(row=3, column=3)
multiplica.grid(row=4, column=3)
divide.grid(row=5, column=3)
resultado.grid(row=5, column=2)
limpiar.grid(row=5, column='1')
Este es todo el código grafico ahora solo queda crear 3 funciones que atienden al punto
número 3 es decir el de procesamiento de datos, para decirlo de otra forma es el código que
se encarga de hacer las operaciones típicas de una calculadora.
def digito(num):
global boton
boton = boton + str(num)
calculo.set(boton)
def igual():
try:
global boton
total = str(eval(boton))
calculo.set(total)
boton = ""
except:
def limpiar():
calculo.set("")
La función digito sirve para guardar toda la expresión matemática por ejemplo
"8+4+5*20/2", digito lo guardará y de inmediato lo mostrara el campo de datos que
habíamos creado haciendo uso del método set en la variable calculo, limpiar hace algo
similar nada más que en lugar de enviar dígitos reemplaza el texto existente por un valor
vacío, y la función igual procesa todo con la función matemática eval() como es de esperar
evaluando la expresión y mostrando el resultado.
Ahora si pueden ejecutarlo y verificar que todo esté en orden, ya tienen su primer
calculadora en Python y a partir de ahí pueden ampliarle funciones o cambiarle el diseño,
que de hecho a mi parecer este diseño no es muy bueno por lo básico que es, a continuación
va el código entero por si confundieron algún paso.
from tkinter import *
boton = ""
def digito(num):
global boton
calculo.set(boton)
def igual():
try:
global boton
total = str(eval(boton))
calculo.set(total)
boton = ""
except:
def limpiar():
calculo.set("")
if __name__ == "__main__":
ventana = Tk()
ventana.configure(background="light blue")
ventana.title("Codigazo Calculator")
ventana.geometry("195x183")
calculo = StringVar()
datos.grid(columnspan=10, ipadx=50)
boton1.grid(row=2, column=0)
boton2.grid(row=2, column=1)
boton3.grid(row=2, column=2)
boton5.grid(row=3, column=1)
boton6.grid(row=3, column=2)
boton7.grid(row=4, column=0)
boton8.grid(row=4, column=1)
boton9.grid(row=4, column=2)
boton0.grid(row=5, column=0)
suma = Button(ventana, text=' + ', fg='black', bg='white',
suma.grid(row=2, column=3)
resta.grid(row=3, column=3)
multiplica.grid(row=4, column=3)
divide.grid(row=5, column=3)
resultado.grid(row=5, column=2)
limpiar.grid(row=5, column='1')
ventana.mainloop()
Capturar numeros desde el teclado
En la programación muy poco está hecho, la mayoría hay que ir haciéndolo, con el código
anterior pueden utilizar la calculadora pero si presionan la tecla enter(intro) para obtener el
resultado no obtendrán esultado, además apenas abren la calculadora es necesario que den
click en el campo input para empezar a escribir los dígitos con el teclado, porque si intentan
digitar sin haber dado click en dicho campo simplemente no captará los números, esto se
debe a que en verdad la ventana entera ha de capturar los eventos del teclado, con el
siguiente código les enseño como capturar los eventos del teclado para que sea el usuario
quien decida como utilizará su calculadora pues es muy molesto tener una calculadora
donde es necesario clickar el botón "=" en lugar de usar la tecla intro.
digito(event.char)
Como iba diciendo bind es el objeto al cual le decimos que capture "<Key>" es decir
cualquier key(tecla), y que cuando lo haga añada una llamada a la función que creamos
anteriormente llamada "teclado", con esto ya no es necesario clicar primero en el campo
input antes de digitar los números, pero todavía tenemos que ligar la tecla enter a la función
igual() que es para obtener el resultado y así nuestra tecla enter será como clicar en "=",
como ya la función igual() existe no tenemos que crear más funciones solo tenemos que
detectar cuando se presione la tecla enter y llamar esta vez a la función teclado, la siguiente
línea de código nos permite hacer esto, solo asegúrese incluirla justo antes de la
sentencia anterior , es decir antes de ventana.bind("<Key>",teclado)
ventana.bind("<Return>", (lambda event: igual()))
Comentarios y preguntas
felipe:
Si quisiera que la calculadora tuviera para colocarle paréntesis para encerrar expresiones y
un punto para señalar que el numero es un float como lo hago?
Codigazo:
Para colocar un punto creamos otro botón definiendo su nombre y en el campo "text"
colocamos un punto, como en el siguiente código:
punto = Button(ventana, text='.', fg='black', bg='white',
punto.grid(row=6, column=0)
Ese código podemos colocarlo debajo del botón limpiar pero pese a que nuestra ventana
tiene una altura máxima de 183px es obvio que para poder ver el botón tendríamos que
agrandar con el mouse la ventana de nuestra calculadora y esto es muy feo así que
agrandamos su tamaño modificando la sentencia ventana.geometry("195x183") por
ventana.geometry("195x225").
Y asi queda nuestro codigazo, cualquier otra duda con mucho gusto.