Задача tkinter сложения / вычитания калькулятор - PullRequest
0 голосов
/ 28 мая 2019

Я попытался создать простой калькулятор, который отображает текущую сумму в виде метки, которая изменяется при добавлении или вычитании чисел с помощью кнопок «ДОБАВИТЬ» и «СУБТРАКТ» через окно ввода. Виджет функционирует только визуально, но не может вычислять нужные мне значения.

Я попытался добавить значение текущей суммы, установленное в 0

from tkinter import*

def addition():
    currentsum=float(e1.get())
    e1.insert(INSERT,str(currentsum))

def subtraction():
    currentsum=currentsum-float(e1.get())
    e1.insert(INSERT,str(currentsum))

def reset():
    currentsum=0
    e1.insert(INSERT,str(currentsum))
window=Tk()

currentsum=0

l1=Label(window,text="current sum:")
l1.grid(row=0, column=0)
l2=Label(window,text=str(currentsum))
l2.grid(row=0,column=1)

e1=Entry(window)
e1.grid(row=1,column=0)


b1=Button(window,text="ADD(+)",command=addition)
b2=Button(window,text="SUBTRACT(-)",command=subtraction)
b3=Button(window,text="RESET",command=reset)
b1.grid(row=2,column=0)
b2.grid(row=2,column=1)
b3.grid(row=2,column=2)

window.mainloop()

Вот сообщение об ошибке:

Exception in Tkinter callback
Traceback (most recent call last):

  File "C:\Users\Administrator\Downloads\sdfgasgasg.py", line 8, in subtraction
    currentsum=currentsum-float(e1.getenter code here())
UnboundLocalError: local variable 'currentsum' referenced before assignment

1 Ответ

1 голос
/ 28 мая 2019

Вы пытаетесь использовать currentsum в своих методах в глобальном контексте, но переменная не обрабатывается должным образом в локальном контексте в ваших методах.Причина в том, что currentsum определяется после ваших методов.Переместите это так, чтобы оно было определено перед методами.Кроме того, если вы хотите убедиться, что переменная сохраняет свои изменения при вызове каждого метода, самый простой способ сделать это - вставить global currentsum во все ваши методы, чтобы вы могли получить доступ к currentsum иизменить его

Кроме того, я бы предложил заменить текст, отображающий текущую сумму, на промежуточную сумму, а не отображать ее, вставив ее в текстовое поле.Вставка добавит то, что в данный момент находится в текстовом поле, с currentsum, что, вероятно, не то, что вы хотели.Кроме того, в вашем методе сложения есть ошибка, из-за которой вы должны накапливать значение, считываемое из текстового поля, а не заменять его.

Следовательно:

from tkinter import*

currentsum=0

def addition():
   global currentsum # New
   currentsum+=float(e1.get()) # Fix
   #e1.insert(INSERT,str(currentsum))
   l2['text'] = str(currentsum) # Change

def subtraction():
   global currentsum # New
   currentsum=currentsum-float(e1.get())
   #e1.insert(INSERT,str(currentsum))
   l2['text'] = str(currentsum) # Change

def reset():
   global currentsum # New
   currentsum=0
   #e1.insert(INSERT,str(currentsum))
   l2['text'] = str(currentsum) # Change
window=Tk()

l1=Label(window,text="current sum:")
l1.grid(row=0, column=0)
l2=Label(window,text=str(currentsum))
l2.grid(row=0,column=1)

e1=Entry(window)
e1.grid(row=1,column=0)


b1=Button(window,text="ADD(+)",command=addition)
b2=Button(window,text="SUBTRACT(-)",command=subtraction)
b3=Button(window,text="RESET",command=reset)
b1.grid(row=2,column=0)
b2.grid(row=2,column=1)
b3.grid(row=2,column=2)

window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...