Cómo construir una calculadora en Tkinter

Python proporciona muchas herramientas para el desarrollo de ciencia de datos, web y Android. Pero una de las mejores herramientas cuando se trata del lenguaje de programación Python es Tkinter para la interfaz gráfica de usuario. La biblioteca Tkinter en Python proporciona widgets GUI que ayudan a crear aplicaciones fáciles de usar. Tkinter es fácil de usar, ligero y rápido. No tiene que instalar Tkinter explícitamente, ya que viene preinstalado con Python.

Debe conocer los conceptos básicos del paquete Tkinter en Python antes de continuar con este tutorial.

Configuración básica de la aplicación

1. Importación del módulo

El primer paso para crear la aplicación es importar el módulo. Al importar el módulo Tkinter, deberá crear una instancia del objeto ttk .

 import tkinter as ttk

2. Creación de la variable de ventana

Para crear una ventana, necesita crear un objeto de ventana usando ttk . Después de crear un objeto de ventana, puede asignar un título y una geometría a la ventana. La geometría establecerá la altura y el ancho de la ventana.

 win = ttk.Tk()
win.title('Simple Calculator')
win.geometry('500x500')

3. MainLoop

El método mainloop () ejecuta la ventana en un bucle infinito. Se ejecuta de forma continua a menos que el usuario cierre la ventana manualmente.

 win.mainloop()

Relacionado: Comience a crear aplicaciones de escritorio en Python con la biblioteca GUI de Tkinter

Construyendo la IU

El paquete Tkinter en Python tiene muchos widgets que ayudan a crear diseños fáciles de usar. Los widgets utilizados en este proyecto son botones y campos de texto . Para este proyecto, necesita los siguientes botones: 0-9 números, sumar , restar , multiplicar , dividir , borrar , eliminar , calcular .

 oneButton = ttk.Button(win, text="1", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(1))
oneButton.grid(row=2, column=0,padx=2, pady=3)
twoButton = ttk.Button(win, text="2", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(2))
twoButton.grid(row=2, column=1, padx=2, pady=3)
threeButton = ttk.Button(win, text="3", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(3))
threeButton.grid(row=2, column=2, padx=2, pady=3)
plusButton = ttk.Button(win, text="+", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("+"))
plusButton.grid(row=2, column=3, padx=2, pady=3)
# div 2
fourButton = ttk.Button(win, text="4", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(4))
fourButton.grid(row=3, column=0, padx=2, pady=3)
fiveButton = ttk.Button(win, text="5", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(5))
fiveButton.grid(row=3, column=1, padx=2, pady=3)
sixButton = ttk.Button(win, text="6", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(6))
sixButton.grid(row=3, column=2, padx=2, pady=3)
minusButton = ttk.Button(win, text="-", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("-"))
minusButton.grid(row=3, column=3, padx=2, pady=3)
# div 3
sevenButton = ttk.Button(win, text="7", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(7))
sevenButton.grid(row=4, column=0, padx=2, pady=3)
eightButton = ttk.Button(win, text="8", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(8))
eightButton.grid(row=4, column=1, padx=2, pady=3)
nineButton = ttk.Button(win, text="9", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(9))
nineButton.grid(row=4, column=2, padx=2, pady=3)
muxButton = ttk.Button(win, text="x", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("*"))
muxButton.grid(row=4, column=3, padx=2, pady=3)
#div 4
zeroButton = ttk.Button(win, text="0", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq(0))
zeroButton.grid(row=5, column=0, padx=2, pady=3)
clearButton = ttk.Button(win, text="clr", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=clearInput)
clearButton.grid(row=5, column=1, padx=2, pady=3)
calculateButton = ttk.Button(win, text="cal", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=calculateEq)
calculateButton.grid(row=5, column=2, padx=2, pady=3)
divideButton = ttk.Button(win, text="/", pady=10, padx=20, font = "Serif 15",bg = "black", fg = "white", command=lambda: addToEq("/"))
divideButton.grid(row=5, column=3, padx=2, pady=3)

El widget de botón acepta muchos argumentos: el objeto de la ventana, el texto que se muestra en el botón, el estilo de fuente, etc. También acepta un argumento de comando que ejecuta una función o método al hacer clic en el botón.

Para alinear botones en filas y columnas para una interfaz de usuario fácil de usar, utilice el atributo de cuadrícula . El atributo de cuadrícula acepta el número de fila y el número de columna como argumentos para alinear los botones en consecuencia.

 numericEq = ttk.StringVar()
dataField = ttk.Entry(win, textvariable=numericEq, font="Serif 15")
dataField.grid(row=0,columnspan=3, ipadx=80, ipady=15)

El widget de entrada es el cuadro de texto del paquete Python Tkinter. Por lo general, el campo Entrada acepta muchos argumentos, pero uno de los argumentos más cruciales y obligatorios es la variable de texto . El usuario puede escribir en el campo Entrada debido a este argumento. En el código anterior, a una variable llamada numericEq se le asigna un atributo ttk.StringVar () para administrar el widget de entrada .

Relacionado: ¿ Aprender Python? Aquí se explica cómo manipular cadenas

Puede ejecutar el archivo Python usando el comando python file_name.py . La aplicación tiene este aspecto:

Añadiendo funcionalidad a los botones:

Como mencionamos anteriormente, el widget Button tiene un atributo de comando que acepta una función o método para ser llamado. Los métodos que se pasan cuando se hace clic en los botones utilizan la función lambda .

1. Botones numéricos y aritméticos

Los botones numéricos constan de valores del 0 al 9 y los botones aritméticos son +, -, x, / para fines de cálculo.

El método addToEq () se llama al hacer clic en el botón. Este método pasa números u operadores aritméticos según el botón en el que haga clic. Después de pasar el valor, los números u operadores se almacenan en la variable calcValue . Antes de almacenar el valor o el operador en la variable calcValue , debe convertirlo al tipo de cadena usando el método str () .

 def addToEq(x):
calcValue = calcValue + str(x)
numericEq.set(calcValue)

2. Calcular botones

El botón con la etiqueta cal calcula la cadena completa almacenada en la variable calcValue . La función eval () ayuda a realizar operaciones aritméticas en la variable calcValue y devuelve el total. Después de recuperar el valor, establezca el valor total en la variable numericEq . La variable numericEq muestra este valor en el cuadro Entrada .

 def calculateEq():
total = str(eval(calcValue))
numericEq.set(total)

3. Botón Borrar

El botón de borrar borra el cuadro de Entrada . Al hacer clic en el botón borrar , se llama al método clearInput () . La variable calcValue se establece en una cadena vacía y se almacena en el cuadro Entrada .

 def clearInput():
calcValue = ""
numericEq.set("")

Una vez que implemente todos estos métodos, la salida del código se verá así:

Los proyectos son la mejor manera de mejorar sus habilidades de codificación

Ahora que ha aprendido a construir una calculadora simple usando GUI en Python Tkinter, es hora de que explore otros paquetes de Python. Python tiene una variedad de paquetes que lo ayudan a construir cualquier aplicación que pueda soñar.

Como probablemente ya sepa, los proyectos son la mejor manera de mostrar sus habilidades. Los proyectos de construcción lo ayudarán a comprender bien el idioma y a construir su currículum.