Ошибка нетипа Tkinter простая таблица в моем коде возвращает эту ошибку

#python #tkinter

Вопрос:

Я пытаюсь создать простой интерфейс, пока все хорошо, но когда я попытался реализовать таблицу в своем интерфейсе, у меня начала появляться ошибка, мой код такой:

 from tkinter import *


class Application(Frame):
    def __init__(self, master, menu):
        super().__init__(master)
        self.master = master
        self.menu = menu
        self.pack()

        self.screen_width = self.master.winfo_screenwidth()
        self.screen_height = self.master.winfo_screenheight()

        self.tbpos = [325, 325]

        self.header()
        self.section()
        self.footer()

    def header(self):
        self.master.title('Zezinfo - Tecnologias em Geral')
        self.master.minsize(self.screen_width, self.screen_height)
        self.master.resizable(False, True)

    def arquivos(self):
        self.dbmenu = Menu(self.menu)

        self.dbmenu.add_command(label="Criar novo banco de dados")
        self.dbmenu.add_command(label="Abrir um banco de dados já existente")

    def exibir1(self):
        self.boxtb(1)

    def exibir2(self):
        self.boxtb(2)

    def exibir3(self):
        self.boxtb(3)

    # Exibir
    # =======================
    def createex(self, n, func, pos):
        self.ex = Button(self.master, image=self.imgex[n-1], bd=0, cursor='hand2', command=func)
            .place(x=pos[0], y=pos[1], w=219, h=67)

    def ftex(self, n):
        return PhotoImage(file=f'./res/exibir{n}.png')

    def boxbtnsex(self, pos, esp=80):
        # Exibir 1
        self.createex(1, self.exibir1, [pos[0], pos[1]])

        # Exibir 2
        self.createex(2, self.exibir2, [pos[0], pos[1] esp])

        # Exibir 3
        self.createex(3, self.exibir3, [pos[0], pos[1] esp*2])
    # =======================

    # Tabelas
    # =======================
    def createtb(self, n):
        self.table = Label(self.master, image=self.imgtb[n-1])
            .place(x=self.tbpos[0], y=self.tbpos[1], w=1025, h=318)

    def fttb(self, n):
        return PhotoImage(file=f'./res/table{n}.png')

    def boxtb(self, n):
        # Tabela
        self.createtb(n)

    # =======================

    # Controle
    # =======================
    def createct(self, pos):
        self.ctrl = Label(self.master, image=self.imgct)
            .place(x=pos[0], y=pos[1], w=1007, h=154)

    def boxctrl(self, pos):
        # Controle 1
        self.createct([pos[0], pos[1]])
    # =======================

    # Menu lateral
    # =======================
    def createmn(self, pos):
        Label(self.master, image=self.img).place(x=pos[0], y=pos[1], w=278, h=499)

    def boxmn(self, pos):
        # Menu lateral 1
        self.createmn(pos)
    # =======================

    # Center
    # =======================

    def imgs(self):
        # Img mn
        self.img = PhotoImage(file='./res/lateralbar.png')

        # Img ct
        self.imgct = PhotoImage(file=f'./res/controle.png')

        # Img ex
        self.imgex = [
            self.ftex(1),
            self.ftex(2),
            self.ftex(3),
        ]

        # Img li
        self.imgtb = [
            self.fttb(1),
            self.fttb(2),
            self.fttb(3),
        ]

    def boxes(self):
        # menulateral
        self.boxmn([35, 155])

        # Tabelas
        self.boxtb(3)

        # Exibir
        self.boxbtnsex([65, 400])

        # Controle
        self.boxctrl([330, 155])


    def table(self):
        for i in range(self.total_rows):
            for j in range(self.total_columns):
                self.e = Entry(self.master, width=20, fg='blue', border=3,
                               font=('Arial', 16, 'bold'))

                self.e.grid(row=i, column=j)
                self.e.insert(END, self.lst[i][j])

    def menus(self):

        self.imgs()

        self.boxes()

        self.lst = [
            [1, 'Raj', 'Mumbai', 19],
            [2, 'Aaryan', 'Pune', 18],
            [3, 'Vaishnavi', 'Mumbai', 20],
            [4, 'Rachna', 'Mumbai', 21],
            [5, 'Shubham', 'Delhi', 21]
        ]
        self.total_rows = len(self.lst)
        self.total_columns = len(self.lst[0])

        self.table()


    # =======================
    def section(self):
        # Background Color
        self.master.configure(background='#009f8f')

        self.arquivos()

        self.menu.add_cascade(label="Arquivos", menu=self.dbmenu)

        self.menus()

    def footer(self):
        Label(self.master, text='Por Érik Freitas', cursor='trek', bg='#009f8f', fg='#a5ff7e', anchor=NW,
              font='consolas 15 normal') 
            .place(x=self.screen_width-200, y=10, w=200, h=30)


root = Tk()
root.state('zoomed')

menu = Menu(root)

app = Application(master=root, menu=menu)

root.config(menu=menu)

app.mainloop()


 

Когда я запускаю этот код, он возвращает ошибку:

 Traceback (most recent call last):
  File "C:/Users/erik/Python/frommydad/main.py", line 188, in <module>
    app = Application(master=root, menu=menu)
  File "C:/Users/erik/Python/frommydad/main.py", line 21, in __init__
    self.section()
  File "C:/Users/erik/Python/frommydad/main.py", line 175, in section
    self.menus()
  File "C:/Users/erik/Python/frommydad/main.py", line 163, in menus
    self.table()
TypeError: 'NoneType' object is not callable
 

Когда я удаляю функцию из таблицы и вызываю ее, код работает нормально, есть ли способ устранить эту ошибку, создав другую функцию, отличную от этой, но которая делает то же самое?

Как я это исправлю?

Комментарии:

1. self.table это функция, которая возвращает None . И вы назначаете Label ему

2. главной проблемой является то, что у вас есть имя переменной совпадает с именем метода, измените имя метода table или имя переменной table , которая находится в методе createtb() , который я назвал boxtb() метод по какой-то причине, которая затем вызывается boxes() метод, который затем вызывается menus() метод перед вызовом self.table() означает, что он был пересмотрен, чтобы никто, почему? потому .pack() что не возвращает ни одного , поэтому этого не следует делать: self.table = Label(self.master, image=self.imgtb[n-1]).place(x=self.tbpos[0], y=self.tbpos[1], w=1025, h=318) , не используйте var или разделите на 2