Python Tkinter - Закладка классов - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать вкладки в моей программе. Каждая вкладка имеет разные функции, метки, записи и т. Д. Моя идея - создать что-то вроде файла mainTab, в котором будут созданы все вкладки. Можно ли наследовать от файла mainTab и создавать классы Tab столько, сколько я хочу? Я хочу отделить каждый класс Tab, потому что у каждого класса есть много методов, и я не хочу писать целые классы табуляции в одном файле. Можно ли создать? Если это так, как я могу создать экземпляр вкладки и подключить его к tab_control?

Например: это то, что я написал, все вкладки в одном классе (что я не хочу создать его вот так)

class CreateLayout:
def __init__(self, window):
    self.window = window

   window.title('TITLE')
    window.geometry('800x600')
    # Create Tab Control
    tab_control = ttk.Notebook(window)

    # Tab1
    tab1 = ttk.Frame(tab_control)
    tab_control.add(tab1, text='Hashtag')
    tab_control.pack(expand=1, fill="both")

    # Tab2
    tab2 = ttk.Frame(tab_control)
    tab_control.add(tab2, text='Following me')
    tab_control.pack(expand=1, fill="both")

Я хочу создать подклассы (Tabs), которые наследуются от CreateLayout класса, и в каждом подклассе написать свою собственную Tab logi c с методы, макет и многое другое ...

Я надеюсь, что мой вопрос ясен, если нет, пожалуйста, дайте мне знать.

В итоге, я хочу создать классы, которые наследуются от CreateLayout и в CreateLayout строим вкладки.

Например

class CreateLayout:
def __init__(self, window):
    self.window = window

tab_control = ttk.Notebook(window)

tab1 = Tab1(window)
tab_control.add(tab1, text='Hashtag')

что-то в этом роде.

1 Ответ

1 голос
/ 25 марта 2020

Можно ли наследовать от файла mainTab и создавать классы Tab столько, сколько я хочу?

Да, это возможно. Tkinter не накладывает никаких ограничений на наследование. Фактически, tkinter делает это действительно легко, так как возможно наследовать от виджетов tkinter. Ключ заключается в том, что ваши вкладки наследуются от tk.Frame, чтобы их можно было рассматривать как обычный виджет.

Например, определение вкладки хэштега может выглядеть примерно так:

class HashtagTab(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        label = tk.Label(self, text="This is the hashtag tab")
        label.pack(padx=20, pady=20)

Другие вкладки будут следовать той же схеме. Вы можете поместить любой код в этот класс, если хотите, если все виджеты являются потомками self, и виджеты в этом классе не будут мешать виджетам в любом другом классе.

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

tab_control = ttk.Notebook(window)
...
hashtag_tab = HashtagTab(tab_control)
following_tab = FollowingTab(tab_control)
...
tab_control.add(hashtag_tab, text="Hashtag")
tab_control.add(following_tab, text="Following")
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...