В будущем, пожалуйста, укажите ошибку, которую вы получите из своего кода. Ваш пример кода скажет вам точно, что не так с ошибкой traceback, которую он производит.
Исключение в обратном вызове Tkinter (последний последний вызов):
Файл "C: \ Users \ user \ Desktop \ Python 3.6.2 \ lib \ tkinter__init __. Py",
линия 1699, вызов
return 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
) может быть обновлена без определения global. Это потому, что у 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()