index = 0
def changeColor():
global index
if index%2==0:
label.configure(bg = "purple")
else:
label.configure(bg = "blue")
index+=1
label.after(1000, changeColor)
def Start (self): # command when start button is clicked in GUI
self.root = Tk()
self.root.geometry("500x300")
mainContainer = Frame (self.root)
label = Label(mainContainer, text = "")
label.pack(side = LEFT, ipadx = 5, ipady = 5)
mainContainer.pack()
label.after(1000, changeColor)
self.root.mainloop()
我收到错误消息:NameError:未定义全局名称'changeColor'。为什么会发生这种情况,我该如何解决?
答案 0 :(得分:2)
在我看来,问题可能是片段中没有的内容。这两个函数都是类定义的一部分吗?从使用self作为Start中的参数,并在changeColor中使用label,它看起来可能是。
如果是这样,让我们说它是Foo类,那么changeColor就是Foo.changeColor。要使用它,你可以将它拉到课堂外,或者从Start开始传递为self.changeColor。
编辑:您应该做的其他三件事情来清理风格:
self.label['bg']
)以确定它所处的状态。答案 1 :(得分:0)
试试这个
index = 0
def changeColor(self):
global index
if index%2==0:
self.label.configure(bg = "purple")
else:
self.label.configure(bg = "blue")
index+=1
def Start (self): # command when start button is clicked in GUI
self.root = Tk()
self.root.geometry("500x300")
mainContainer = Frame (self.root)
label = Label(mainContainer, text = "")
label.pack(side = LEFT, ipadx = 5, ipady = 5)
mainContainer.pack()
label.after(1000, self.changeColor)
# above should really be lambda: changeColor()
self.root.mainloop()
工作示例
>>> def f(): print f
...
>>> def h(f): f()
...
>>> def g(): h(f)
...
>>> g()
<function f at 0x7f2262a8c8c0>