AttributeError: объект 'Application' не имеет атрибута 'create_widgets' - PullRequest
1 голос
/ 18 июня 2020

У меня небольшая проблема с моим кодом. Мне нужно сделать сумматор, но у меня ошибка, и я не знаю, где у меня ошибка. Там написано:

"AttributeError: 'Application' object has no attribute 'create_widgets'. 

Буду благодарен, если вы поможете мне решить проблему!

here is the error

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")```

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вам нужно сделать отступ для функции calculate(self) и функции create_widgets(self) в вашем классе Application. Таким образом, python знает, что они являются частью класса.

Я также внес несколько улучшений в вашу программу, например, сделал ее лучше.

Вот последний код:

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):
    #create widgets
        self.firstNumberEntry = tk.Entry(bd = 0)
        self.plusSign = tk.Label(text = "+")
        self.secondNumberEntry = 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"))

        #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 the app
app = Application()
app.master.frame()
app.master.title("Sumator")
app.master.minsize(width=100, height=50)

#start the program
app.mainloop()

Надеюсь, это вам поможет!

1 голос
/ 18 июня 2020

Ваши методы create_widgets и calculate на самом деле не входят в ваш класс, они должны иметь отступ, как __init__, например

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...