Я пытаюсь указать сумму в поле ввода всякий раз, когда пользователь суммирует или вычитает ввод. однако он не показывает общую сумму, а объединяет их в одну строку. так, например, я хочу сложить 15 и 1. Сначала пользователь вводит 15, затем нажимает +, затем 1. вместо 16 он получает 151.

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("Calculator")
window.geometry("300x100")

# creating label for labelT
labelT = Label(text="Total: ")
labelT.grid()
# creating entry for labelT
tBox = Entry()
tBox.grid(column=1, row=0)
tBox.configure(state='disabled')
# creating entry for user number
numBox = Entry(window)
numBox.grid(column=1, row=1)


def sum():
    total = 0
    try:
        num = int(numBox.get())
    except:
        tk.messagebox.showwarning(title='Warning', 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')


def subtract():
    total = 0
    try:
         num = int(numBox.get())
    except:
         tk.messagebox.showwarning(title='Warning', 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=sum)
btn1.grid(column=0, row=2)
btn2 = Button(text="-", command=subtract)
btn2.grid(column=1, row=2)

window.mainloop()
0
Hdhdh Hdhd 27 Ноя 2021 в 15:28
Во-первых, не используйте голый except (на самом деле никогда), в этом случае используйте except TypeError:; вам нужно очистить запись перед вставкой новой суммы, также вам действительно следует использовать одну функцию для изменения записей
 – 
Matiiss
27 Ноя 2021 в 15:39
Его все еще не подводят итоги, я сделал все, что вы сказали, он не печатал значения рядом друг с другом, как раньше, но он все еще не подводил итоги.
 – 
Hdhdh Hdhd
27 Ноя 2021 в 16:28

1 ответ

Лучший ответ

Внутри sum() (лучше использовать другое имя, поскольку sum - стандартная функция Python) total всегда инициализируется нулем, поэтому

  • сначала введите 15, затем total будет 15 и вставьте в начало tBox
  • затем введите 1, total будет 1 (а не 16) и вставьте в начало tBox, что составит tBox 115.

Вам необходимо инициализировать total 0 вне sum() и очистить tBox перед вставкой нового результата:

# initialise total
total = 0

def sum():
    global total
    try:
        num = int(numBox.get())
    except:
        tk.messagebox.showwarning(title='Warning', message="Please enter numbers only")
        numBox.delete(0, tk.END)
    else:
        tBox.configure(state='normal')
        # update total
        total += num
        # clear tBox
        tBox.delete(0, END)
        # insert new result into tBox
        tBox.insert(0, total)
        tBox.configure(state='disabled')

Обратите внимание на ту же проблему в subtract().

0
acw1668 27 Ноя 2021 в 17:11