程序不会将+1添加到“总计”中。 有更好的编程方法吗? 我也主要使用Pycharm,这可能。
from tkinter import * #imports tkinter
window = Tk() #Tk name
window.title("Cookie Clicker")#window title
window.geometry('350x200')#window size
lbl = Label(window, text="$0.00")#makes label
lbl.grid(column=0, row=0)#makes label
x=0 #possibly a problem
total=0 #possibly a problem
def clicked():
total = total+1 # also possibly causing problems
lbl.configure(text='${:,.2f}'.format(total))#This is possibly causing problems
btn = Button(window, text="Cookie", command=clicked)#This is the button
btn.grid(column=1, row=0)
mainloop()
答案 0 :(得分:1)
问题是该函数中未定义变量total
。您可以通过将total
设置为全局变量来解决此问题:
def clicked():
global total
total = total+1
lbl.configure(text='${:,.2f}'.format(total))
这使total
成为全局变量,这意味着该函数可以更改其在全局命名空间中的值。您需要在要访问该变量的每个函数中使用global
。
另一种解决方案是使用面向对象的方法并将total
设置为属性。
答案 1 :(得分:0)
将来,请包括您从代码中得到的错误。您的示例代码将告诉您它产生的回溯错误到底出了什么问题。
Tkinter回调Traceback中的异常(最近一次调用最后一次):
文件“ C:\ Users \ user \ Desktop \ Python 3.6.2 \ lib \ tkinter__init __。py”, 第1699行,在致电中 返回self.func(* args)文件“ C:\ Users \ user \ neon \ workspace \ OLD_MINT \ OM \ Test3.py”,行17,在 点击了 total = total + 1#也可能会引起问题UnboundLocalError:赋值之前引用了局部变量'total'
此回溯中的关键信息是:
UnboundLocalError: local variable 'total' referenced before assignment
这告诉您函数视图total
作为局部变量,并且抱怨您在分配之前试图引用。此部分专门total+1
。
要纠正这种情况,您需要告诉您的函数total
是全局变量,因此该函数将首先在全局命名空间中查找。
现在您可能想知道是否是这种情况,然后为什么可以在不定义全局的情况下更新标签(lbl
)。这是因为python可以猜测是局部变量还是全局变量。
如果您尝试编辑某些内容而不实际分配它,则python将首先在函数中本地查找,然后,如果找不到,它将在全局名称空间中查找。我不确定所有细节,但这通常就是它在做的事情。
from tkinter import *
window = Tk()
window.title("Cookie Clicker")
window.geometry('350x200')
lbl = Label(window, text="$0.00")
lbl.grid(column=0, row=0)
x=0
total=0
def clicked():
global total # tell the function total is in the global namespace.
total = total+1
lbl.configure(text='${:,.2f}'.format(total))
btn = Button(window, text="Cookie", command=clicked)
btn.grid(column=1, row=0)
mainloop()