我试图构建一个简单的计算器,该计算器将当前总和显示为一个标签,当通过输入窗口中的“ 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
答案 0 :(得分:1)
您试图在全局上下文中的方法中使用currentsum
,但是在本地上下文中方法中的变量未正确处理。原因是因为currentsum
是在您的方法之后定义的。移动它,使其在方法之前定义。另外,如果您想确保变量在每个方法被调用时都保持其更改,则“最简单”的方法是在所有方法中插入global currentsum
,以便您可以访问{{ 1}}并对其进行修改
此外,我建议将显示当前总和的文本替换为运行总计,而不是通过将其插入文本字段来显示此总和。插入将在文本字段中使用currentsum
附加当前内容,这可能不是您想要的。另外,加法中存在一个错误,您应该累积从文本字段读取的值,而不是替换它。
因此:
currentsum