Использование классов для создания динамических виджетов Tkinter

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

window
    notebook1
        frame1
            label1
            text1
            label2

Есть (3) блокнота, по 3-5 рамок в каждой. Поскольку в моем текущем коде все объекты созданы вручную, получить к ним доступ из любого другого места очень просто. Однако это значительно усложняет добавление / изменение страниц записной книжки.

import tkinter as tk
import tkinter.ttk as ttk


class MyFrame(ttk.Frame):
    def __init__(self):
        ttk.Frame.__init__(self)
        self.grid(padx=3, pady=3, row=3, column=0, columnspan=1, sticky=tk.W)

        self.header = ttk.Label(self, text="More testing")
        self.body = tk.Text(self)
        self.body.insert(tk.INSERT, "Hello...")
        self.footer = ttk.Label(self, text="More testing")

        self.header.grid(row=0, sticky=tk.W)
        self.body.grid(row=1, sticky=tk.W)
        self.footer.grid(row=2, sticky=tk.W)


class MyNotebook(ttk.Notebook):
    def __init__(self):
        ttk.Notebook.__init__(self)
        self.grid(padx=3, pady=3, row=0, column=1, columnspan=1, sticky=tk.W)
        self.enable_traversal()

        self.add(MyFrame(), text="This is Page #1")
        print(self.tabs()[0])


# Creating blank window
win = tk.Tk()
win.title("Coinbase Pro Markets")
win.iconphoto(False, tk.PhotoImage(file="icons/coinbase-pro.png"))

# Setting Theme
style = ttk.Style()
style.theme_use('alt')

# Start the loop
nb1 = MyNotebook()
win.mainloop()

Как написано, все отображается именно так, как я хочу; проблема заключается в доступе к динамически создаваемым виджетам. У меня нет проблем с доступом к фреймам, которые я добавляю в блокнот, но ярлыки и текстовые виджеты — это совсем другое дело. Поскольку мои виджеты постоянно меняются — программа читает / управляет данными в реальном времени — без доступа после создания виджеты бесполезны.

Где я ошибаюсь?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *