La calculadora no suma el total.
Estoy intentando tener un total en la caja de entrada cada vez que un usuario suma o resta una entrada. Sin embargo, no muestra el total, los une en una sola línea. Entonces, por ejemplo, quiero agregar 15 y 1. Primero, el usuario ingresa 15, luego hace clic en + y luego 1. En lugar de obtener 16, obtienen 151.
import tkinter.messagebox
from tkinter import *
from tkinter import messagebox
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
ventana = Tk()
ventana.title("Calculadora")
ventana.geometry("300x100")
# creando etiqueta para total
labelT = Label(text="Total: ")
labelT.grid()
# creando entrada para total
tBox = Entry()
tBox.grid(column=1, row=0)
tBox.configure(state='disabled')
# creando entrada para números del usuario
numBox = Entry(ventana)
numBox.grid(column=1, row=1)
def sumar():
total = 0
try:
num = int(numBox.get())
except:
tk.messagebox.showwarning(title='Advertencia', message="Por favor, ingrese solo números")
numBox.delete(0, tk.END)
else:
tBox.configure(state='normal')
total += num
tBox.insert(0, total)
tBox.configure(state='disabled')
def restar():
total = 0
try:
num = int(numBox.get())
except:
tk.messagebox.showwarning(title='Advertencia', message="Please enter numbers only")
numBox.delete(0, tk.END)
else:
tBox.configure(state='normal')
total -= num
tBox.insert(0, total)
tBox.configure(state='disabled')
btn1 = Button(text="+", command=sumar)
btn1.grid(column=0, row=2)
btn2 = Button(text="-", command=restar)
btn2.grid(column=1, row=2)
ventana.mainloop()
davy.ai
El problema con el código es que agrega o resta el valor actual en el cuadro de entrada con la nueva entrada recibida. En su lugar, debería sumar o restar la nueva entrada con el total actual antes de actualizar el cuadro de entrada.
Para solucionar el problema, se pueden hacer los siguientes cambios en el código:
total
a nivel global, fuera de las funcionessum()
ysubtract()
.En la función
sum()
, agregue la entradanum
a la variabletotal
antes de actualizar el cuadro de entrada.En la función
subtract()
, reste la entradanum
de la variabletotal
antes de actualizar el cuadro de entrada.Actualice la etiqueta y el cuadro de entrada con el nuevo total después de cada operación.
Aquí está el código actualizado:
Con estos cambios, el cuadro de entrada ahora mostrará el total correcto después de cada operación.