В другом вопросе о структуре кода Python было предложено одно решение:
Вопрос здесь можно найти: Лучший способ структурировать приложение tkinter
class Navbar(tk.Frame): ...
class Toolbar(tk.Frame): ...
class Statusbar(tk.Frame): ...
class Main(tk.Frame): ...
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.statusbar = Statusbar(self, ...)
self.toolbar = Toolbar(self, ...)
self.navbar = Navbar(self, ...)
self.main = Main(self, ...)
self.statusbar.pack(side="bottom", fill="x")
self.toolbar.pack(side="top", fill="x")
self.navbar.pack(side="left", fill="y")
self.main.pack(side="right", fill="both", expand=True)
Мне нравится решение, и я пытался воспроизвести его в крошечных масштабах, прежде чем применить его к моему коду. Может кто-нибудь помочь мне, какие аргументы, параметры отсутствуют для настройки приложения?
Смотри ниже мой код:
import tkinter as tk
class Main(tk.Frame):
def __init__(self, master):
central = tk.Frame(master)
central.pack(side="top", fill="both")
class SubMain(tk.Frame):
def __init__(self,master):
lowercentral = tk.Frame(master)
lowercentral.pack(side="top", fill="both")
class MainApplication(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.central = Main(self)
self.lowercentral = SubMain(self)
self.central.pack(side="top", fill="both")
self.lowercentral.pack(side="top", fill="both")
root = tk.Tk()
MainApplication(root).pack(side="top", fill="both")
root.mainloop()
Несколько слов к моему коду. Я ожидаю, что код просто откроет пустое белое окно.
Класс Main и SubMain должны создать два кадра. MainApplication должен объединять оба класса и эффективно действовать как центр всех классов.
Однако я получаю сообщение об ошибке:
AttributeError: «Главный» объект не имеет атрибута «tk»
Я предполагаю, что, как и в моем примере, я пропускаю параметры в функции init MainApplication, но мои варианты не дали никакого успеха.
Может ли кто-нибудь помочь мне с этим?