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()