【问题标题】:Python Tkinter - Tab classesPython Tkinter - 选项卡类
【发布时间】:2020-07-05 23:09:45
【问题描述】:

我正在尝试在我的程序中构建选项卡。每个选项卡都有不同的功能、标签、条目等...... 我的想法是创建一个类似于 mainTab 文件的东西来创建所有选项卡。 是否可以从mainTab 文件继承并尽可能多地创建 Tab 类? 我想分离每个 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")

我想创建继承自 CreateLayout 类的子类(Tabs),并在每个子类上编写自己的 Tab 逻辑,包括方法、布局等......

我希望我的问题很清楚,如果没有,请告诉我。

底线,我要创建的是继承自 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')

类似的东西。

【问题讨论】:

  • 您必须将Tab1(window) 更改为Tab1(tab_control)。相关:Correctly extend a tkinter widget using inheritance,在您的情况下,您必须从 Frame 继承。
  • 就这样?这就是我需要在main 文件上做的所有事情来创建一个选项卡?
  • “就这样?”:是的,1.“标签”必须是一个容器小部件,常见的Frame2.“Tab”的父级必须是Notebook 小部件。

标签: python python-3.x tkinter


【解决方案1】:

是否可以从 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")
...

【讨论】:

  • 在类 HashtagTab 上,我应该只从 tk.Frame 继承吗?另一个文件上的主要代码呢,我也应该从他那里继承吗?
  • @E.Bolandian:不,你不应该从主代码继承。继承不是为了共享数据,继承定义了“is a”关系 - HashTab is a Frame,但它不是 一个CreateLayou.
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2011-05-04
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多