Как мне отредактировать переменную внутри определенного кода? - PullRequest
0 голосов
/ 02 ноября 2018

Программа не добавит +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()

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

В будущем, пожалуйста, укажите ошибку, которую вы получите из своего кода. Ваш пример кода скажет вам точно, что не так с ошибкой 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()
0 голосов
/ 02 ноября 2018

Проблема в том, что переменная total не определена в функции. Вы можете исправить это, сделав total глобальной переменной:

def clicked():
    global total  
    total = total+1
    lbl.configure(text='${:,.2f}'.format(total)) 

Это делает total глобальной переменной, что означает, что функция может изменить свое значение в глобальном пространстве имен. Вам нужно использовать global в каждой функции, к которой вы хотите иметь доступ к переменной.

Другим решением было бы использование объектно-ориентированного подхода и присвоение total атрибута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...