这是试图在单击按钮时增加数字。
def something():
CP = 0
counter = StringVar()
counter.set("0")
def click():
global CP
global counter
CP = CP + 1
counter.set(str(CP))
label5=Label(window, textvariable=counter, font=("Georgia", 16), fg="blue")
button5=Button(window, text='Make a Clip', command=click)
label5.pack()
button5.pack()
在此部分的第6行上没有名称错误。
Traceback (most recent call last):
File "D:\Program Files\Python\Python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "D:\Program Files\Python\Python36\Paperclips.py", line 14, in click
CP = CP + 1
NameError: name 'CP' is not defined
代码有什么问题?
最佳答案
CP
不是global
,而是nonlocal
。只需将global
替换为nonlocal
,即可在嵌入函数中找到该变量。counter
之间有细微的差别。您不需要为其他变量counter
进行此操作,因为您只是在使用引用(+=
有所不同)。
简单的独立示例:
def a():
x = 0
def b():
nonlocal x # tell python that x is in the function(s) above
x += 1
b()
print(x)
a()
打印
1
将
+=
或append
与列表一起使用时的有趣区别:def a():
l = []
def b():
l.append(435)
b()
print(l)
a()
现在有效:
def a():
l = []
def b():
# nonlocal l # uncomment for it to work
l += [435]
b()
print(l)
a()
这应该是等效的,但必须将
+=
l
声明为nonlocal
(更多信息:Concatenating two lists - difference between '+=' and extend()和相关答案:https://stackoverflow.com/a/24261311/6451573)但是,对于整数,由于整数不可变性,因此
+=
无法用函数调用BTW代替。因此,nonlocal
仍然是唯一可行的选择。关于python-3.x - 修改全局变量导致的NameError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51748291/