from tkinter import *
i=1
def abc():
a=str(l2.get())
l1.insert(i,a)
i=i+1
w=Tk()
w.geometry("500x300")
l1=Listbox(w,height=3)
l2=Entry(w)
l3=Button(w, text='insert', command=abc)
l1.grid(row=1,column=1)
l2.grid(row=2,column=1)
l3.grid(row=3,column=1)
w.mainloop()
我得到UnBoundLocalError:本地变量"I"在赋值之前被重新引用
正如注释中所指出的,要访问global
变量并在函数内使用该全局引用进行赋值,您需要首先在函数块内将其声明为global
。但是,如果您使用global
,那么您在function
块内进行的每一次分配也会影响global
范围内的i
!
如果可以预料的话,这不是世界末日。但是,如果您想维护global
作用域变量,那么您可以尝试以下代码:
from tkinter import *
i=1
def abc():
import __main__
j = __main__.i
a=str(l2.get())
l1.insert(j,a)
j = j+1
print(j) #tracking
w=Tk()
w.geometry("500x300")
l1=Listbox(w,height=3)
l2=Entry(w)
l3=Button(w, text='insert', command=abc)
l1.grid(row=1,column=1)
l2.grid(row=2,column=1)
l3.grid(row=3,column=1)
w.mainloop()
print(i) #tracking
单击insert
后的结果,然后立即退出:
2
1
[Finished in 2.5s]
感谢acw1668他在评论中回答";您需要在abc((的开头添加全局i。–acw1668 1分钟前";我已经试过了,它现在起作用了。我想把他的回答标记为正确,但由于他在评论中补充了这一点,我无法将其标记为正确。在全球环境中声明已经意味着它是全球性的,就像我的老师在大学里教我的那样。我不知道为什么我必须在功能上单独引用它是全球性。