当前位置:首页>python>python高阶:27、tkinter库(ttk模块Notebook组件)

python高阶:27、tkinter库(ttk模块Notebook组件)

  • 2026-10-11 07:09:56
python高阶:27、tkinter库(ttk模块Notebook组件)
1、Notebook组件介绍

ttk.Notebook 是 Tkinter 中用于创建多标签页界面的组件,就像一个带标签的文件夹,让复杂的功能分区显示,界面更清晰。它的核心用法是先将一个容器(通常是 ttk.Frame)添加到 Notebook 上,再把这个 Frame 当作独立的页面来填充内容。

2、模块导入

import tkinter as tkfrom tkinter import ttk

3、主窗口的创建

import tkinter as tkfrom tkinter import ttkroot=tk.Tk()        #创建主窗口实例对象rootroot.title("Notebook组件")root.geometry("400x300+600+200")root.mainloop()

4、Notebook组件常用属性

属性
说明
height

设置标签页区域的高度(像素)

width

设置标签页区域的宽度(像素)

padding

内边距,格式为 (left, top, right, bottom) 或单个数值

style

指定样式名称(配合 ttk.Style 使用)

takefocus

是否可以通过 Tab 键获得焦点

import tkinter as tkfrom tkinter import ttkroot=tk.Tk()        #创建主窗口实例对象rootroot.title("Notebook组件")root.geometry("400x300+600+200")nb=ttk.Notebook(root,height=200,width=100)  #创建组件对象nbnb.pack(expand="True",fill="both",padx=10,pady=10)root.mainloop()

5、Notebook组件常用方法

方法
说明
add(child, **kwargs)

添加一个新的标签页。child 通常是一个 ttk.Frame。

insert(pos, child, **kwargs)

在指定位置(索引)插入标签页。

forget(tab_id)

永久删除指定标签页。

hide(tab_id)

临时隐藏标签页(可用 add() 恢复)。

select(tab_id=None)

切换到指定标签页(按索引或组件);无参时返回当前选中的标签页标识。

tab(tab_id,option=None, **kwargs)

查询或修改标签页的选项(如 text、state、image)。

index(tab_id)

获取标签页的索引位置。

tabs()

返回所有标签页标识的列表。

enable_traversal()

启用键盘快捷键(Alt + 标题带下划线的字母)。

import tkinter as tkfrom tkinter import ttkroot=tk.Tk()        #创建主窗口实例对象rootroot.title("Notebook组件")root.geometry("400x300+600+200")nb=ttk.Notebook(root,height=200,width=100)  #创建Notebook组件对象nbnb.pack(expand="True",fill="both",padx=10,pady=10)#创建标签页的内容容器 (Frame)tab1=ttk.Frame(nb)nb.add(tab1,text="欢迎")  #将Frame对象tab1添加为标签页,标题为"欢迎"tab2=ttk.Frame(nb)nb.add(tab2,text="设置")  #将Frame对象tab2添加为标签页,标题为"设置"#在标签页tab1中添加组件内容btn1=ttk.Button(tab1,text="确定")btn1.pack(pady=5)btn2=ttk.Button(tab1,text="取消")btn2.pack(pady=5)#在标签页tab2中添加组件内容label=ttk.Label(tab2,text="这是一个输入框:")label.pack(pady=5)entry=ttk.Entry(tab2,width=10)entry.pack(pady=5)root.mainloop()

6、示例代码:创建一个带有四个标签页的窗口

(1)添加、插入标签页

(2)动态修改标题和禁用标签页

(3)删除、隐藏标签页

(4)获取当前标签页并绑定切换事件

import tkinter as tkfrom tkinter import ttkroot=tk.Tk()        #创建主窗口实例对象rootroot.title("Notebook组件")root.geometry("400x300+600+200")#创建Notebook组件对象nb=ttk.Notebook(root,padding=5)nb.pack(expand=True,fill="both",padx=10,pady=10)#添加第一个标签页tab1=ttk.Frame(nb)nb.add(tab1,text="首页")ttk.Label(tab1,text="Notebook演示").pack(pady=20)ttk.Button(tab1,text="切换到第二个标签页",command=lambda: nb.select(1)).pack()#添加第二个标签页def insert_tab():    new_tab=ttk.Frame(nb)    ttk.Label(new_tab,text="我是插入的标签页",background="red").pack(expand=True,fill="both")    nb.insert(1,new_tab,text="插入页")    nb.select(new_tab)tab2=ttk.Frame(nb)nb.add(tab2,text="设置")ttk.Label(tab2,text="这里是设置页面").pack(pady=20)ttk.Button(tab2,text="在位置1插入新标签页",command=insert_tab).pack(pady=5)#添加第三个标签页tab3=ttk.Frame(nb)nb.add(tab3,text="已禁用")nb.tab(tab3,state="disabled")      # 禁用此标签页ttk.Label(tab3,text="这个标签页被禁用了,无法点击").pack(pady=20)#添加第四个标签页def change_title():    current_title=nb.tab(tab4,"text")    new_title="标题已改" if current_title == "动态标题" else "动态标题"    nb.tab(tab4,text=new_title)tab4=ttk.Frame(nb)nb.add(tab4,text="动态标题")ttk.Label(tab4,text="点击下方按钮修改我的标题").pack(pady=20)ttk.Button(tab4,text="修改标题",command=change_title).pack()#控制面板(位于Notebook下方)def get_current_index():    current=nb.select()    idx=nb.index(current)    text=nb.tab(current,"text")    print(f"当前选中:索引{idx},标题\"{text}\"")def restore_hidden():    if tab2 in nb.tabs():        print("第二个标签页并未隐藏")    else:        nb.add(tab2,text="设置")  #恢复后标题需重新指定        print("已恢复隐藏的标签页")control_frame = ttk.Frame(root)control_frame.pack(pady=10)ttk.Button(control_frame, text="获取当前标签页索引", command=get_current_index).pack(side="left", padx=5)ttk.Button(control_frame, text="隐藏第二个标签页", command=lambda: nb.hide(tab2)).pack(side="left", padx=5)ttk.Button(control_frame, text="恢复隐藏的标签页", command=restore_hidden).pack(side="left", padx=5)ttk.Button(control_frame, text="删除第三个标签页", command=lambda: nb.forget(tab3)).pack(side="left", padx=5)root.mainloop()

最新文章

随机文章