es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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()
Tags:  , , , ,

Answer

  1. Avatar for 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:

    1. Inicialice la variable total a nivel global, fuera de las funciones sum() y subtract().
    2. En la función sum(), agregue la entrada num a la variable total antes de actualizar el cuadro de entrada.

    3. En la función subtract(), reste la entrada num de la variable total antes de actualizar el cuadro de entrada.

    4. Actualice la etiqueta y el cuadro de entrada con el nuevo total después de cada operación.

    Aquí está el código actualizado:

    import tkinter.messagebox
    from tkinter import *
    from tkinter import messagebox
    import tkinter as tk
    from tkinter import ttk
    from tkinter.messagebox import showinfo
    
    window = Tk()
    window.title("Calculadora")
    window.geometry("300x100")
    
    total = 0  # inicializando la variable total
    
    # creando la etiqueta para el total
    labelT = Label(text="Total: ")
    labelT.grid()
    # creando el cuadro de entrada para el total
    tBox = Entry()
    tBox.grid(column=1, row=0)
    tBox.configure(state='disabled')
    # creando el cuadro de entrada para el número del usuario
    numBox = Entry(window)
    numBox.grid(column=1, row=1)
    
    
    def sum():
        global total  # accediendo a la variable global
        try:
            num = int(numBox.get())
        except:
            tk.messagebox.showwarning(title='Advertencia', message="Por favor, ingrese sólo números")
            numBox.delete(0, tk.END)
        else:
            total += num  # agregando nueva entrada a total
            tBox.configure(state='normal')
            tBox.delete(0, END)  # limpiando el cuadro de entrada
            tBox.insert(0, total)  # actualizando con el nuevo total
            tBox.configure(state='disabled')
    
    
    def subtract():
        global total  # accediendo a la variable global
        try:
            num = int(numBox.get())
        except:
            tk.messagebox.showwarning(title='Advertencia', message="Por favor, ingrese sólo números")
            numBox.delete(0, tk.END)
        else:
            total -= num  # restando nueva entrada de total
            tBox.configure(state='normal')
            tBox.delete(0, END)  # limpiando el cuadro de entrada
            tBox.insert(0, total)  # actualizando con el nuevo total
            tBox.configure(state='disabled')
    
    
    btn1 = Button(text="+", command=sum)
    btn1.grid(column=0, row=2)
    btn2 = Button(text="-", command=subtract)
    btn2.grid(column=1, row=2)
    
    window.mainloop()
    

    Con estos cambios, el cuadro de entrada ahora mostrará el total correcto después de cada operación.

Comments are closed.