Полный код ошибки:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1702, in __call__
return self.func(*args)
File "<string>", line 97, in withdraw_expense
AttributeError: 'Application' object has no attribute 'mydictValues'
Я использую эту же переменную в других функциях (distribute
), и она отлично работает. Ошибка возникает только при использовании в withdraw_expense
from tkinter import *; import sys; import csv
sys.path.insert(1, 'My Desktop'); from UsefulFunctions import setup_screen
class Application(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
with open("dict.csv", "r") as f:
self.mydict = dict(csv.reader(f))
self.create_widgets()
def clear_window(self, x):
# clears the window
def create_widgets(self):
# asks the user to select an input an executes its corresponding function
def distribute(self):
# creates a top level next to the main window
paycheck = int(self.paycheckEntry.get())
expenses = {"Mortgage":.32, "Electric/Gas":.07, "Water":.02, "Phone/Internet/Cable":.05,"Insurance":.12,
"Vehicle":.12, "Groceries":.15, "Entertainment":.05, "Savings":.1}
self.mydictValues = []
for value in self.mydict.values():
self.mydictValues.append(value)
i = -1
for key, value in expenses.items():
i += 1
self.mydict.update({key : str(float(self.mydictValues[i]) + float(round(paycheck * value, 2)))})
Label(expense_screen, text = "", bg = "dim gray", width = "55", height = "2", font = ("Calibri", 15)).grid(column = 0, sticky = W)
Label(expense_screen, text = "These are your monthly expenses").grid(column = 0, sticky = W)
for key, value in self.mydict.items():
Label(expense_screen, text = key + ": " + value).grid(column = 0, sticky = W)
with open("dict.csv", "w") as f:
writer = csv.writer(f)
for key, value in self.mydict.items():
writer.writerow([key, " " + value])
def enter_personal(self):
self.clear_window(1)
Label(self, text = "Select one from the following options", bg = "dim gray", width = "55", height = "2", font = ("Calibri", 15)).grid(column = 0, sticky = W)
self.expenseAmountEntry = Entry(self); self.expenseAmountEntry.grid(column = 0, sticky = W)
self.i = -1
var = IntVar()
for key in self.mydict.keys():
self.i += 1
Radiobutton(self, text = key, variable = var, value = self.i).grid(column = 0, sticky = W)
Button(self, text = "Submit", command = self.withdraw_expense).grid(column = 0, sticky = W)
def withdraw_expense(self):
expenseAmount = self.expenseAmountEntry.get(); del self.expenseAmountEntry
self.clear_window(1)
mydictKeys = []
for key in self.mydict.keys():
mydictKeys.append(key)
for x in range(len(mydictKeys)):
print("x = " + str(x)+ "; self.i = " + str(self.i))
if mydictKeys[x] == mydictKeys[self.i]:
self.mydict.update({mydictKeys[self.i]:self.mydictValues[self.i] - expenseAmount})
Button(self, text = "Exit", command = main_screen.destroy).grid(column = 0, sticky = W)
main_screen = Tk()
main_screen.title("Budget Tracker")
setup_screen(main_screen, 500, 500)
app = Application(main_screen)
main_screen.mainloop()