这是尝试在单击按钮时增加数字。
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
代码有什么问题?
答案 0 :(得分:0)
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()和相关答案:{{3} })
但是对于整数,由于整数不可变性,+=
无法用函数调用BTW代替。因此,nonlocal
仍然是唯一可行的选择。