我收到了错误...
a = a + b
UnboundLocalError: local variable 'a' referenced before assignment
如果我在开始时分配了两个变量a和b,我就不明白为什么会出错。
from tkinter import *
a = 10
b = 12
def stopProg(e):
root.destroy()
def addNumbers(e):
a = a + b
label1.configure(text= str(a))
root=Tk()
button1=Button(root,text="Exit")
button1.pack()
button1.bind('<Button-1>',stopProg)
button2=Button(root,text="Add numbers")
button2.pack()
button2.bind('<Button-1>',addNumbers)
label1=Label(root,text="Amount")
label1.pack()
root.mainloop()
答案 0 :(得分:5)
每当修改函数内的全局变量时,都需要首先将该变量声明为全局变量。
因此,您需要对全局变量a
执行此操作,因为您在addNumbers
内修改了它:
def addNumbers(e):
global a
# This is the same as: a = a + b
a += b
# You don't need str here
label1.configure(text=a)
以下是global
关键字的参考。
此外,我想指出,如果您使用command
的{{1}}选项,则可以改进您的代码:
Button
使用绑定代替from tkinter import *
a = 10
b = 12
def stopProg():
root.destroy()
def addNumbers():
global a
a += b
label1.configure(text=a)
root=Tk()
button1=Button(root, text="Exit", command=stopProg)
button1.pack()
button2=Button(root, text="Add numbers", command=addNumbers)
button2.pack()
label1=Label(root, text="Amount")
label1.pack()
root.mainloop()
选项绝不是一个充分的理由。
答案 1 :(得分:1)
您正在修改全局变量。默认情况下,您可以从全局变量中读取值,而不将其声明为global
,但要修改它们,您需要将它们声明为global
,如下所示
global a
a = a + b
答案 2 :(得分:1)
这是你的答案:
这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。