Метод требует собственного аргумента - PullRequest
0 голосов
/ 26 мая 2020

У меня есть этот код прямо здесь, он о приложении GUI с Tkinter, довольно простом, но есть одна ошибка, которую я не могу решить, не нарушая код:

import tkinter as tk

class Sistema:

    def __init__(self, g1 = 0, g2 = 0, g3 = 0, g4 = 0, media = 6):
        self.g1 = g1
        self.g2 = g2
        self.g3 = g3
        self.g4 = g4
        self.media = media
        resultCalc = (self.g1 + self.g2 + self.g3 + self.g4) / 4
        self.resultCalc = resultCalc


        Label_reply['text'] = Sistema.__str__()
    def __str__(self):

        if self.resultCalc < self.media:
            return "Você não passou de ano! ╰(‵□′)╯"
        elif self.resultCalc > self.media:
            return "Você passou de ano!(~ ̄▽ ̄)~"
        elif self.resultCalc == self.media:
            return "Você passou de ano! Essa foi por pouco (。_。)"
        else:
            return "Erro fatal (╬▔皿▔)╯"


root = tk.Tk()

canvas = tk.Canvas(root, bg = "#159BA0", height = 500, width = 500)
canvas.pack()

Label1 = tk.Label(canvas, text = "Digite sua nota:")
Label1.place(x = 10,y = 10)
Entry1 = tk.Entry(canvas)
Entry1.place(x = 100,y = 10)

Label2 = tk.Label(canvas, text = "Digite sua nota:")
Label2.place(x = 10,y = 50)
Entry2 = tk.Entry(canvas)
Entry2.place(x = 100,y = 50)

Label3 = tk.Label(canvas, text = "Digite sua nota:")
Label3.place(x = 10, y = 90)
Entry3 = tk.Entry(canvas)
Entry3.place(x = 100, y = 90)

Label4 = tk.Label(canvas, text = "Digite sua nota:" )
Label4.place(x = 10, y = 130)
Entry4 = tk.Entry(canvas)
Entry4.place(x = 100, y = 130)

Label5 = tk.Label(canvas, text = "Média mínima: ")
Label5.place(x=10, y = 170)
Entry5 = tk.Entry(canvas)
Entry5.place(x=100, y = 170)

Button1 = tk.Button(canvas, text = "Enviar",
command = lambda : Sistema(float(Entry1.get()), float(Entry2.get()), float(Entry3.get()), float(Entry4.get()), 
float(Entry5.get())))
Button1.place(x = 10, y = 210)

Label_reply = tk.Label(canvas)
Label_reply.place(x = 10, y = 240)

root.mainloop()

Но, когда я запускаю его, возникает это исключение:

TypeError: __str__() missing 1 required positional argument: 'self'

Ошибка находится в строке 15. Я знаю, что это означает и почему это происходит, но я не могу найти способ решить эту проблему, не испортив код, может ли кто-нибудь мне помочь?

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Рассмотрим эту строку кода:

Label_reply['text'] = Sistema.__str__()

Вы вызываете метод __str__ в классе , а не в экземпляре класса. Вот почему он запрашивает параметр self.

Я предполагаю, что вы хотите вызвать метод __str__ текущего объекта, что вы можете сделать, вызвав str(self):

Label_reply['text'] = str(self)
1 голос
/ 26 мая 2020

Удалите эту строку:

      Label_reply['text'] = Sistema.__str__()

Это неправильный вызов функции __str__ (это должно быть что-то вроде str(self)), и он бесполезен, так как нет Label_reply в любом случае в пределах этой области.

Вместо этого поместите logi c обновления Label_reply в свою command функцию:

Label_reply = tk.Label(canvas)
Label_reply.place(x = 10, y = 240)
def command():
    s = Sistema(
        float(Entry1.get()), 
        float(Entry2.get()), 
        float(Entry3.get()), 
        float(Entry4.get()), 
        float(Entry5.get())
    )
    Label_reply['text'] = str(s)
    return s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...