Как разместить def на сумму записей в TKINTER - PullRequest
2 голосов
/ 13 января 2020

Я пытаюсь получить сумму t1 и t2 после нажатия кнопки b1. Тем не менее, я не могу понять, где расположить def sum (self): поскольку он в настоящее время находится в коде, я получаю ошибку TypeError: sum () отсутствует 1 обязательный позиционный аргумент: 'self' после ввода в t1 и t2, затем нажимаем b1.

from tkinter import *
import tkinter as tk


class Example(tk.Frame):
    def __init__(self, root):

        tk.Frame.__init__(self, root)
        self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
        root.geometry("1000x500")
        self.frame = tk.Frame(self.canvas, background="#ffffff")
        self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window=self.frame, anchor="nw",
                                  tags="self.frame")


        self.populate()


    def populate(self):
        l1=Label(self.frame,text="First Number")
        l1.grid(row=0,column=0)
        t1=Entry(self.frame)
        t1.grid(row=0,column=1)
        l2=Label(self.frame,text="Second Number")
        l2.grid(row=1,column=0)
        t2=Entry(self.frame)
        t2.grid(row=1,column=1)
        l3=Label(self.frame,text="Result")
        l3.grid(row=2,column=0)
        t3=Entry(self.frame)
        t3.grid(row=2,column=1)
        b1=Button(self.frame,text="Click For SUM",command=sum)
        b1.grid(row=3,column=1)


def onFrameConfigure(self, event):
    '''Reset the scroll region to encompass the inner frame'''
    self.canvas.configure(scrollregion=self.canvas.bbox("all"))


def sum(self):
    a=int(self.t1.get())
    b=int(self.t2.get())
    c=a+b
    self.t3.insert(0,c)


if __name__ == "__main__":
    root=tk.Tk()
    Example(root).pack(side="top", fill="both", expand=True)

    root.mainloop()

1 Ответ

2 голосов
/ 13 января 2020

Функция ожидает параметр self. В python методы класса (если они явно не декорированы @staticmethod) автоматически передаются self (объект, вызывающий функцию) в качестве первого параметра.

Первая проблема связана с отступом: sum(self) не имеет отступов и, следовательно, не интерпретируется как метод класса Example, и ни один из них не является onFrameConfigure; вам нужно сделать так, чтобы оба из них были на том же уровне отступа, что и populate ()

Даже после того, как вы исправите это, вы столкнетесь с другой проблемой: Вам также нужно назначить переменные к классу, когда вы создаете их в populate(self), иначе они будут существовать только в области действия этой функции, и у вас не будет хорошего способа получить к ним доступ. Вам также необходимо изменить команду. Поскольку вы вызываете метод, вам нужно объявить соответствующее пространство имен (self):

    def populate(self):
        self.l1=Label(self.frame,text="First Number")
        self.l1.grid(row=0,column=0)
        ...
        self.b1=Button(self.frame,text="Click For SUM", command=self.sum)
        self.b1.grid(row=3,column=1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...