Python 为什么会出现这种显示和错误?我已经检查了好几次了,但都不起作用
我犯了这个错误Python 为什么会出现这种显示和错误?我已经检查了好几次了,但都不起作用,python,python-3.x,class,tkinter,Python,Python 3.x,Class,Tkinter,我犯了这个错误 Traceback (most recent call last): File "C:\Users\Ethan\OneDrive\Documents\Python\Dad Task 2.py", line 159, in <module> app = window(root) File "C:\Users\Ethan\OneDrive\Documents\Python\Dad Task 2.py", line 1
Traceback (most recent call last):
File "C:\Users\Ethan\OneDrive\Documents\Python\Dad Task 2.py", line 159, in <module>
app = window(root)
File "C:\Users\Ethan\OneDrive\Documents\Python\Dad Task 2.py", line 148, in __init__
self.LoanAmtAns = self.PriceAns - self.MorDepAns
AttributeError: 'window' object has no attribute 'MorDepAns'
[Finished in 0.243s]
答案很简单,在定义
self.MoreDepAns
之前,您正在引用self.MoreDepAns
。在使用之前,您需要将其初始化为某个值。self.MorDepAns未初始化,因此会发生错误,但是,还有一些其他问题:
self.PriceAns
如果不存在,则应初始化为零self.PriceAns-self.MorDepAns
分配给self.LoanAmtAns
的值应转换为字符串您是否有意将所有这些函数嵌套在
\uuuu init\uuu
中?这是一种非常不寻常的代码编写方式。请提供预期的。您发布了大约150个用于10行问题的代码留置权。为什么要将函数嵌套在类构造函数中?它几乎完全违背了一开始就使用类的观点。通过使用一个具有标签
、条目
和按钮
的泛型类,可以大大精简整个代码。该类可以有一个回调
参数连接到按钮
命令
,还有一个文本
参数用于标签
。这样,您只需要定义所有回调
,并为您需要的每个条目创建一个类实例。你做这一切都很辛苦。。。还有一种奇怪的方式。如果我不在工作,我会给你举个例子。你会学到很多。
from tkinter import *
class window():
def __init__(self,root):
self.root = root
self.root.title("Dad task 2")
self.root.geometry('500x500')
self.root.configure(bg = "#c0ded9")
self.entBoEText = StringVar()
self.entVarEleText = StringVar()
self.entIntRatText = StringVar()
self.entPriceText = StringVar()
self.entTaxRateText = StringVar()
self.entDepText = StringVar()
self.entLoanText = StringVar()
self.entLTVText = StringVar()
self.entPriceText = StringVar()
self.entYearsText = StringVar()
self.entMorDepText = StringVar()
# Bank Of England Rate
def BoEEnter():
self.butBoEAns = self.entBoEText.get()
print(self.butBoEAns)
self.lblBoE = Label (self.root,text = 'BoE Rate : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblBoE.grid(row = 0,column = 0)
self.entBoE = Entry(self.root,width = 10,textvariable = self.entBoEText)
self.entBoE.grid(row = 0,column = 1)
self.butBoE = Button(self.root, text = 'Enter',command = BoEEnter)
self.butBoE.grid(row = 0,column = 3)
# Variable Element
def VarEleEnter():
self.VarEleAns = self.entVarEleText.get()
print(self.VarEleAns)
self.lblVarEle = Label (self.root,text = 'Variable Element : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblVarEle.grid(row = 1,column = 0)
self.entVarEle = Entry(self.root,width = 10,textvariable = self.entVarEleText)
self.entVarEle.grid(row = 1,column = 1)
self.butVarEle= Button(self.root, text = 'Enter',command = VarEleEnter)
self.butVarEle.grid(row = 1,column = 3)
# Intrest Rate
def IntRatEnter():
self.IntRatAns = self.entIntRatText.get()
print(self.IntRatAns)
self.lblIntRat = Label (self.root,text = 'Intrest Rate : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblIntRat.grid(row = 2,column = 0)
self.entIntRat = Entry(self.root,width = 10,textvariable = self.entIntRatText)
self.entIntRat.grid(row = 2,column = 1)
self.butIntRat = Button(self.root, text = 'Enter',command = IntRatEnter)
self.butIntRat.grid(row = 2,column = 3)
# Tax Rate
def TaxRateEnter():
self.TaxRateAns = self.entTaxRateText.get()
print(self.TaxRateAns)
self.lblTaxRate = Label (self.root,text = 'Tax Rate : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblTaxRate.grid(row = 3,column = 0)
self.entTaxRate = Entry(self.root,width = 10,textvariable = self.entIntRatText)
self.entTaxRate.grid(row = 3,column = 1)
self.butTaxRate = Button(self.root, text = 'Enter',command = TaxRateEnter)
self.butTaxRate.grid(row = 3,column = 3)
# Price
def PriceEnter():
self.PriceAns = self.entPriceText.get()
print(self.PriceAns)
self.lblPrice = Label (self.root,text = 'Price : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblPrice.grid(row = 4,column = 0)
self.entPrice = Entry(self.root,width = 10,textvariable = self.entPriceText)
self.entPrice.grid(row = 4,column = 1)
self.butPrice = Button(self.root, text = 'Enter',command = PriceEnter)
self.butPrice.grid(row = 4,column = 3)
# Deposit
def DepEnter():
self.DepAns = self.entDepText.get()
print(self.DepAns)
self.DepAns = self.entDepText.get()
self.lblDep = Label (self.root,text = 'Deposit : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblDep.grid(row = 5,column = 0)
self.entDep = Entry(self.root,width = 10,textvariable = self.entDepText)
self.entDep.grid(row = 5,column = 1)
self.butDep = Button(self.root, text = 'Enter',command = DepEnter)
self.butDep.grid(row = 5,column = 3)
# Mortgage Deposit
def MorDepEnter():
self.MorDepAns = self.entMorDepText.get()
print(self.MorDepAns)
self.lblMorDep = Label (self.root,text = 'Mortgage Deposit : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblMorDep.grid(row = 6,column = 0)
self.entMorDep = Entry(self.root,width = 10,textvariable = self.entMorDepText)
self.entMorDep.grid(row = 6,column = 1)
self.butMorDep = Button(self.root, text = 'Enter',command = MorDepEnter)
self.butMorDep.grid(row = 6,column = 3)
# Loan
def LoanEnter():
self.LoanAns = self.entLoanText.get()
print(self.LoanAns)
self.lblLoan = Label (self.root,text = 'Loan : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblLoan.grid(row = 7,column = 0)
self.entLoan = Entry(self.root,width = 10,textvariable = self.entLoanText)
self.entLoan.grid(row = 7,column = 1)
self.butLoan = Button(self.root, text = 'Enter',command = LoanEnter)
self.butLoan.grid(row = 7,column = 3)
# LTV
def LTVEnter():
self.LTVAns = self.entLTVText.get()
print(self.LTVAns)
self.lblLTV = Label (self.root,text = 'LTV : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblLTV.grid(row = 8,column = 0)
self.entLTV = Entry(self.root,width = 10,textvariable = self.entLTVText)
self.entLTV.grid(row = 8,column = 1)
self.butLTV = Button(self.root, text = 'Enter',command = LTVEnter)
self.butLTV.grid(row = 8,column = 3)
# Price
def PriceEnter():
self.PriceAns = self.entPriceText.get()
print(self.PriceAns)
self.PriceAns = self.entPriceText.get()
self.lblLTV = Label (self.root,text = 'Price : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblLTV.grid(row = 9,column = 0)
self.entLTV = Entry(self.root,width = 10,textvariable = self.entPriceText)
self.entLTV.grid(row = 9,column = 1)
self.butLTV = Button(self.root, text = 'Enter',command = PriceEnter)
self.butLTV.grid(row = 9,column = 3)
# Years`
def YearsEnter():
self.YearsAns = self.entYearsText.get()
print(self.YearsAns)
self.lblLTV = Label (self.root,text = 'Years : ',font= ('Gill Sans', 12),bg = "#c0ded9")
self.lblLTV.grid(row = 10,column = 0)
self.entLTV = Entry(self.root,width = 10,textvariable = self.entYearsText)
self.entLTV.grid(row = 10,column = 1)
self.butLTV = Button(self.root, text = 'Enter',command = YearsEnter)
self.butLTV.grid(row = 10,column = 3)
self.LoanAmtAns = self.PriceAns - self.MorDepAns
self.lblLoanAmt = Label(self.root,text = "Loan Amount = " + self.LoanAmtAns)
self.lblLoanAmt.grid(row = 0,column = 4)
root = Tk()
app = window(root)
root.mainloop()
from tkinter import *
class window():
def __init__(self, root):
self.root = root
self.root.title("Dad task 2")
self.root.geometry('500x500')
self.root.configure(bg="#c0ded9")
self.entBoEText = StringVar()
self.entVarEleText = StringVar()
self.entIntRatText = StringVar()
self.entPriceText = StringVar()
self.entTaxRateText = StringVar()
self.entDepText = StringVar()
self.entLoanText = StringVar()
self.entLTVText = StringVar()
self.entPriceText = StringVar()
self.entYearsText = StringVar()
self.entMorDepText = StringVar()
# Bank Of England Rate
def BoEEnter():
self.butBoEAns = self.entBoEText.get()
print(self.butBoEAns)
self.lblBoE = Label(self.root, text='BoE Rate : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblBoE.grid(row=0, column=0)
self.entBoE = Entry(self.root, width=10, textvariable=self.entBoEText)
self.entBoE.grid(row=0, column=1)
self.butBoE = Button(self.root, text='Enter', command=BoEEnter)
self.butBoE.grid(row=0, column=3)
# Variable Element
def VarEleEnter():
self.VarEleAns = self.entVarEleText.get()
print(self.VarEleAns)
self.lblVarEle = Label(self.root, text='Variable Element : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblVarEle.grid(row=1, column=0)
self.entVarEle = Entry(self.root, width=10, textvariable=self.entVarEleText)
self.entVarEle.grid(row=1, column=1)
self.butVarEle = Button(self.root, text='Enter', command=VarEleEnter)
self.butVarEle.grid(row=1, column=3)
# Intrest Rate
def IntRatEnter():
self.IntRatAns = self.entIntRatText.get()
print(self.IntRatAns)
self.lblIntRat = Label(self.root, text='Intrest Rate : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblIntRat.grid(row=2, column=0)
self.entIntRat = Entry(self.root, width=10, textvariable=self.entIntRatText)
self.entIntRat.grid(row=2, column=1)
self.butIntRat = Button(self.root, text='Enter', command=IntRatEnter)
self.butIntRat.grid(row=2, column=3)
# Tax Rate
def TaxRateEnter():
self.TaxRateAns = self.entTaxRateText.get()
print(self.TaxRateAns)
self.lblTaxRate = Label(self.root, text='Tax Rate : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblTaxRate.grid(row=3, column=0)
self.entTaxRate = Entry(self.root, width=10, textvariable=self.entIntRatText)
self.entTaxRate.grid(row=3, column=1)
self.butTaxRate = Button(self.root, text='Enter', command=TaxRateEnter)
self.butTaxRate.grid(row=3, column=3)
# Price
def PriceEnter():
self.PriceAns = self.entPriceText.get()
print(self.PriceAns)
self.lblPrice = Label(self.root, text='Price : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblPrice.grid(row=4, column=0)
self.entPrice = Entry(self.root, width=10, textvariable=self.entPriceText)
self.entPrice.grid(row=4, column=1)
self.butPrice = Button(self.root, text='Enter', command=PriceEnter)
self.butPrice.grid(row=4, column=3)
# Deposit
def DepEnter():
self.DepAns = self.entDepText.get()
print(self.DepAns)
self.DepAns = self.entDepText.get()
self.lblDep = Label(self.root, text='Deposit : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblDep.grid(row=5, column=0)
self.entDep = Entry(self.root, width=10, textvariable=self.entDepText)
self.entDep.grid(row=5, column=1)
self.butDep = Button(self.root, text='Enter', command=DepEnter)
self.butDep.grid(row=5, column=3)
self.MorDepAns = 0
# Mortgage Deposit
def MorDepEnter():
self.MorDepAns = self.entMorDepText.get()
print(self.MorDepAns)
self.lblMorDep = Label(self.root, text='Mortgage Deposit : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblMorDep.grid(row=6, column=0)
self.entMorDep = Entry(self.root, width=10, textvariable=self.entMorDepText)
self.entMorDep.grid(row=6, column=1)
self.butMorDep = Button(self.root, text='Enter', command=MorDepEnter)
self.butMorDep.grid(row=6, column=3)
# Loan
def LoanEnter():
self.LoanAns = self.entLoanText.get()
print(self.LoanAns)
self.lblLoan = Label(self.root, text='Loan : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblLoan.grid(row=7, column=0)
self.entLoan = Entry(self.root, width=10, textvariable=self.entLoanText)
self.entLoan.grid(row=7, column=1)
self.butLoan = Button(self.root, text='Enter', command=LoanEnter)
self.butLoan.grid(row=7, column=3)
# LTV
def LTVEnter():
self.LTVAns = self.entLTVText.get()
print(self.LTVAns)
self.lblLTV = Label(self.root, text='LTV : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblLTV.grid(row=8, column=0)
self.entLTV = Entry(self.root, width=10, textvariable=self.entLTVText)
self.entLTV.grid(row=8, column=1)
self.butLTV = Button(self.root, text='Enter', command=LTVEnter)
self.butLTV.grid(row=8, column=3)
# Price
def PriceEnter():
self.PriceAns = self.entPriceText.get()
print(self.PriceAns)
self.PriceAns = self.entPriceText.get()
self.PriceAns = self.PriceAns if self.PriceAns else 0
self.lblLTV = Label(self.root, text='Price : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblLTV.grid(row=9, column=0)
self.entLTV = Entry(self.root, width=10, textvariable=self.entPriceText)
self.entLTV.grid(row=9, column=1)
self.butLTV = Button(self.root, text='Enter', command=PriceEnter)
self.butLTV.grid(row=9, column=3)
# Years`
def YearsEnter():
self.YearsAns = self.entYearsText.get()
print(self.YearsAns)
self.lblLTV = Label(self.root, text='Years : ', font=('Gill Sans', 12), bg="#c0ded9")
self.lblLTV.grid(row=10, column=0)
self.entLTV = Entry(self.root, width=10, textvariable=self.entYearsText)
self.entLTV.grid(row=10, column=1)
self.butLTV = Button(self.root, text='Enter', command=YearsEnter)
self.butLTV.grid(row=10, column=3)
self.LoanAmtAns = str(self.PriceAns - self.MorDepAns)
self.lblLoanAmt = Label(self.root, text="Loan Amount = " + self.LoanAmtAns)
self.lblLoanAmt.grid(row=0, column=4)
root = Tk()
app = window(root)
root.mainloop()