You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向tk.Frame组件中添加ttk.Notebook标签页组件?

如何在tk.Frame中添加ttk.Notebook标签页组件?

你当前的GUI结构如下:

┏━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━┓
┃ @ ┃ hello world                 ┃ X ┃
┣━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━┫
┃                                     ┃
┃                                     ┃
┃                                     ┃
┃                                     ┃   <- Frame 0
┃                                     ┃
┃                                     ┃
┃                                     ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃                OTHER                ┃   <- Frame 1
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

希望将Frame 0修改为带多标签页的样式:

┏━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━┓
┃ @ ┃ hello world                 ┃ X ┃
┣━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━┫
┃ ┏━━━━━━━┳━━━━━━━┳━━━━━━━━━┳━━━━━━━┓ ┃
┃ ┃ Tab 0 ┃ Tab 1 ┃ Tab ... ┃ Tab n ┃ ┃
┃ ┣━━━━━━━┻━━━━━━━┻━━━━━━━━━┻━━━━━━━┫ ┃
┃ ┃                                 ┃ ┃
┃ ┃                                 ┃ ┃   <- Frame 0 with n tabs (Notebooks)
┃ ┃                                 ┃ ┃
┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃                OTHER                ┃   <- Frame 1
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

直接执行tabControl = ttk.Notebook(self.frame0)无效果,核心原因是只创建了Notebook组件但没有对它进行布局,同时还需要导入ttk模块并为Notebook添加标签页内容。

修改后的完整代码

import tkinter as tk
from tkinter import ttk  # 导入ttk模块

class MyApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("hello world")

        self.frame0 = tk.Frame(self, background="green")
        self.frame1 = tk.Frame(self, background="blue")

        self.frame0.pack(side="top", fill="both", expand=True)
        self.frame1.pack(side="top", fill=tk.X, expand=True)

        # 在frame0中创建Notebook组件
        self.tab_control = ttk.Notebook(self.frame0)
        # 布局Notebook,让它填满frame0
        self.tab_control.pack(fill="both", expand=True)

        # 创建标签页(每个标签页用Frame承载内容)
        self.tab0 = tk.Frame(self.tab_control, bg="white")
        self.tab1 = tk.Frame(self.tab_control, bg="lightgray")
        self.tab2 = tk.Frame(self.tab_control, bg="lightblue")

        # 将标签页添加到Notebook
        self.tab_control.add(self.tab0, text="Tab 0")
        self.tab_control.add(self.tab1, text="Tab 1")
        self.tab_control.add(self.tab2, text="Tab 2")

        # 给标签页添加示例内容
        tk.Label(self.tab0, text="这是Tab 0的内容").pack(pady=20)
        tk.Button(self.tab1, text="Tab 1的按钮").pack(pady=20)
        tk.Entry(self.tab2).pack(pady=20)

        self.frame1_label0 = tk.Label(self.frame1, text="OTHER")
        self.frame1_label0.grid(row=0, column=0)

def main():
    MyApp().mainloop()

if __name__ == "__main__":
    main()

关键步骤说明

  1. 导入ttk模块:tkinter的ttk子模块提供了Notebook等更现代的组件,必须导入才能使用。
  2. 创建并布局Notebook:在self.frame0中实例化ttk.Notebook后,必须调用pack(fill="both", expand=True)让它填满父容器frame0,否则组件不会显示。
  3. 添加标签页:每个标签页需要是一个容器(通常用tk.Frame),通过tab_control.add()方法将其添加到Notebook,并设置标签显示文本。
  4. 填充标签页内容:在每个标签页的Frame中添加你需要的组件即可。

内容的提问来源于stack exchange,提问作者user69453

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:59:52