Python 属性错误:';应用程序';对象没有属性';创建小部件';

Python 属性错误:';应用程序';对象没有属性';创建小部件';,python,python-3.x,Python,Python 3.x,我的代码有点问题。我必须做一个推销员,但我有一个错误,我不知道我哪里有错误。上面说 "AttributeError: 'Application' object has no attribute 'create_widgets'. 如果你能帮我解决这个问题,我将不胜感激 import tkinter as tk class Application(tk.Frame): def __init__(self, master = None): super().__init_

我的代码有点问题。我必须做一个推销员,但我有一个错误,我不知道我哪里有错误。上面说

"AttributeError: 'Application' object has no attribute 'create_widgets'. 
如果你能帮我解决这个问题,我将不胜感激

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.pack()
        self.create_widgets()

#create the app
app = Application()
app.master.frame()
app.master.title("Sumator")
app.master.minsize(width=100, height=50)

#start the program
app.mainloop()

def create_widgets(self):
    #create widgets
    self.firstNumberEntry = tk.Entry()
    self.plusSign = tk.Label(text = "+")
    self.secondNumberEntry = tk.Entry()
    self.equalSign = tk.Label(text = "=")
    self.resultLabel = tk.Label(text = "Result...", bg = "green", fg = "white")
    self.calculateButton = tk.Button(text = "Calculate", command = self.calculate)

    #place widgets
    self.firstNumberEntry.pack(side = "left")
    self.plusSign.pack(side = "left")
    self.secondNumberEntry.pack(side = "left")
    self.equalSign.pack(side = "left")
    self.resultLabel.pack(side = "left")
    self.calculateButton.pack(side = "left")

def calculate(self):
    try:
        first_value = float(self.firstNumberEntry.get())
        second_value = float(self.secondNumberEntry.get())
        result = first_value + second_value
        self.resultLabel.config(text = str(result), bg = "green", fg = "white")

    except ValueError:
        self.resultLabel.config(text="No number/s", bg="red", fg="black")```


您的方法
create\u widgets
calculate
实际上不在您的类中,它们应该像
\uuuuuuu init\uuuuuu
那样缩进,如下所示

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.pack()
        self.create_widgets()

    def create_widgets(self):
        #...

    def calculate(self):
        #...

#create the app
app = Application()
app.master.frame()
app.master.title("Sumator")
app.master.minsize(width=100, height=50)

#start the program
app.mainloop()

您需要将
calculate(self)
函数和
create_widgets(self)
函数缩进
应用程序
类中。这样,python就知道它们是类的一部分

我还对你的程序做了一些改进,比如让它看起来更好

以下是最终代码:

将tkinter作为tk导入
类应用程序(tk.Frame):
def uuu init uuu(self,master=None):
超级()。\uuuu初始化\uuuuu(主)
self.pack()
self.create_widgets()
def创建_小部件(自):
#创建小部件
self.firstnumberntry=tk.Entry(bd=0)
self.plusSign=tk.Label(text=“+”)
self.secondnumberntry=tk.Entry(bd=0)
self.equalSign=tk.Label(text=“=”)
self.resultLabel=tk.Label(text=“Result…”,bg=“green”,fg=“white”)
self.calculateButton=tk.Button(text=“Calculate”,command=self.Calculate,bd=0,relief=“flat”)
self.calculateButton.config(activebackground=self.calculateButton.master.cget(“bg”))
#放置小部件
self.firstNumberEntry.pack(side=“left”)
自加符号包(side=“left”)
self.secondnumber.pack(side=“left”)
自平衡信号包(side=“left”)
self.resultLabel.pack(side=“left”)
self.calculateButton.pack(side=“left”)
def计算(自我):
尝试:
first\u value=float(self.firstNumberEntry.get())
second\u value=float(self.secondNumberEntry.get())
结果=第一个值+第二个值
self.resultLabel.config(text=str(result),bg=“绿色”,fg=“白色”)
除值错误外:
self.resultLabel.config(text=“No number/s”,bg=“red”,fg=“black”)
#创建应用程序
app=应用程序()
app.master.frame()
附录主标题(“Sumator”)
app.master.minsize(宽=100,高=50)
#启动程序
app.mainloop()

希望这对你有帮助

方法
create\u widgets
calculate
都在类中,它们应该像
\uuuuu init\uuuuuu
一样缩进,主代码应该在类之外