tkinter加/减计算器问题

时间:2019-05-28 06:22:14

标签: python tkinter

我试图构建一个简单的计算器,该计算器将当前总和显示为一个标签,当通过输入窗口中的“ ADD”和“ SUBTRACT”按钮添加或减去数字时,该标签会发生变化。该小部件仅在视觉上起作用,但无法计算我想要的值。

我试图添加一个设置为0的currentsum值

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 个答案:

答案 0 :(得分:1)

您试图在全局上下文中的方法中使用currentsum,但是在本地上下文中方法中的变量未正确处理。原因是因为currentsum是在您的方法之后定义的。移动它,使其在方法之前定义。另外,如果您想确保变量在每个方法被调用时都保持其更改,则“最简单”的方法是在所有方法中插入global currentsum,以便您可以访问{{ 1}}并对其进行修改

此外,我建议将显示当前总和的文本替换为运行总计,而不是通过将其插入文本字段来显示此总和。插入将在文本字段中使用currentsum附加当前内容,这可能不是您想要的。另外,加法中存在一个错误,您应该累积从文本字段读取的值,而不是替换它。

因此:

currentsum