Например, вы можете использовать простую структуру для хранения этих виджетов, вот пример одной из моих старых функций:)
Как и здесь, self.creation_panel
- это диктат.
def creation_view(self, core_line, skills_line):
#### Navigate functions for main menu ####
def set_navigate(self, arg):
self.navigate = arg
#### Configurations for create interference ####
self.configure_grid_x(20)
self.configure_grid_y(5)
row = 0
col = 0
#### Create body of view ####
for txt in core_line:
if col == 12:
col = 0
row += 1
self.creation_panel[txt] = Button(self.frame, text=txt, command=lambda cls=self, arg=txt: set_navigate(cls, arg))
self.creation_panel[txt].grid(row=row, column=col, columnspan=3, sticky=NSEW)
col += 3
for txt in skills_line:
if col == 12:
col = 0
row += 1
self.creation_panel[txt] = Button(self.frame, text=txt, state=DISABLED, command=lambda cls=self, arg=txt: set_navigate(cls, arg))
self.creation_panel[txt].grid(row=row, column=col, columnspan=4, sticky=NSEW)
col += 4
self.creation_panel["Preview"] = Button(self.frame, text="Preview", command=lambda cls=self: set_navigate(cls, "Preview"))
self.creation_panel["Preview"].grid(row=row+1, column=0, columnspan=12, sticky=NSEW)
self.preview_window1 = Label(self.frame, text="", justify=LEFT)
self.preview_window1.grid(row=0, rowspan=5, column=12, columnspan=4, sticky=NSEW)
self.preview_window1.config(state='disabled', relief=SUNKEN)
self.preview_window2 = Label(self.frame, text="", justify=LEFT)
self.preview_window2.grid(row=0, rowspan=5, column=16, columnspan=4, sticky=NSEW)
self.preview_window2.config(state='disabled', relief=SUNKEN)
self.frame.pack(side=LEFT, fill=BOTH, expand=1)
Может быть, это не самый лучший способ, и некоторые другие меня поправят.Но есть один из возможных способов. Переменная
self.navigate
использовалась для навигации, потому что класс представляет только представление в MVC-модели GUI :).Если он изменился, то из контроллера отправляется сигнал, получается новая модель и вызывается новый вид.Или каким-то другим образом, я не помню этот старый проект.