#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