Notebook 笔记本组件

ttk.Notebook笔记本组件类似多页的 Frame ,通过点击顶部标签的选项卡选择不同容器。笔记本小部件的目的是提供一个区域,用户可以通过单击区域顶部的选项卡来选择内容页面

每次用户单击其中一个选项卡时,窗口小部件将显示 与该选项卡关联的子窗格。通常,每个窗格都是 Frame窗口小部件,但窗格可以是任何窗口小部件。
当前显示的子窗格的选项卡称为选定选项卡。

使用Notebook窗口小部件的.add()方法附加新选项卡及其相关内容。

每个选项卡都有自己的一组选项来控制其外观和行为。

要将Notebook窗口小部件创建为某个窗口小部件的子parent窗口,使用以下构造函数:

w= ttk.Notebook(parent,option= value,...)

ttk.Notebook选项包括:

选项。 说明.
class_ 小部件类名称。这可以在创建窗口小部件时指定,但以后不能更 改。有关窗口小部件类的说明。
cursor 鼠标悬停在笔记本上时出现的光标。鼠标经过Notebook控件时候的形状
height 要分配给窗口小部件的高度(以像素为单位)。Notebook控件的高度
width 要分配给窗口小部件的宽度(以像素为单位)。
padding 设置Notebook外围的额外空间,可以设置4个数值代表left、top、right、bottom四周的空间。定义Notebook控件与其他控件的间隔值
style 用于渲染此menubutton的样式。
takefocus 默认情况下, ttk. Notebook将包含在焦点遍历中。要从焦点遍 历中删除小部件,请使用takefocus=False。定义是否可以通过Tab获得输入焦点
add(child, **kw) child 参数是一个小部件,通常Frame,它包装一个子窗格中的内容。如果child不是Notebook窗口小部件的子窗格之一,child则添加为下一个可用选项卡,关键字参数kw定义新窗格的选项卡选项。这些选项在表51“ ttk.Notebook 小部件的选项卡选项”中定义。
如果child是当前隐藏的窗格,则该选项卡将重新显示在其以前的位置。
更多可选参数:
compound:可以设置当选项卡内同时含图像和文字时,彼此之间的位置关系。
image:选项卡以图像方式呈现。
padding:可以设置Notebook和面板Pane的额外空间。
state:可能值是normal、disabled、hidden,如果是disabled表示无法被选取使用,如果是hidden表示被隐藏。
sticky:指出子窗口面板的配置方式,n/s/e/w分别代表North、South、East、West。
text:选项卡中的字符串内容。
underline:从0开始计算的索引,指出第几个字母含下画线。
enable_traversal() 一旦调用此方法,一些额外的键绑定将起作用:
Control-Tab将在当前选择的选项卡后选择选项卡。如果当前选择了最后一个选项卡,则选择将旋转回第一个选项卡。
Shift-Control-Tab执行相反操作:它移动到上一个选项卡,如果选择了第一个选项卡,则环绕到最后一个选项卡。
您可以配置直接选择选项卡的特定热键。要执行此操作,请使用text和underline选项卡选项为每个选项卡中的一个字符加下划线。然后,用户可以通过键入Alt-跳转到选项卡,x其中 x是该选项卡上带下划线的字符。
如果Notebook在同一个应用程序中有多个小部件,则除非创建每个子窗格小部件并将其Notebook窗口小部件作为父窗口小部件,否则这些功能将无法正常工作。
forget(tab_id) 删除索引值为tab_id的标签页。
forget方法是彻底的删除以tab_id为索引的Tab,也包括与之有关的所有子控件。
这里的删除是指与Tab的关联,而不是这些子控件不在可用。实际上,这些被删除关联的子控件,还可以重新与Tab相关联,只需要简单使用add()就可以了。
hide(tabId) 隐藏索引值为tab_id的标签页, 再次调用该方法来恢复它。
index(tabId) 返回tab_id代表的Tab的数字索引值。有一个例外:如果参数是字符串"end",则该方法将返回选项卡的总数。
insert(where, child,**kw) 此方法使用任何关键字参数将窗口小部件插入到child指定的位置 where,以描述新选项卡和窗格。有关关键字选项,请参阅表51“ ttk.Notebook 小部件的选项卡选项”。
该where 参数可以是任何的:
“end” 在所有现有选项卡之后放置新选项卡。
现有的子窗口小部件; 在这种情况下,new child就在现有小部件之前插入.
select([tabId]) 如果在没有参数的情况下调用此方法,它将返回当前显示其选项卡的窗口小部件的窗口名称。
要显示特定窗格Notebook,请使用a tabId作为参数调用此方法。
tab(tabId, option=None, **kw) 使用此方法可以为所描述的子窗格设置选项卡选项tabId,或者找出为该子窗格设置的选项。
如果您调用没有关键字参数的方法,它将返回当前对指定的窗格有效的选项卡选项的字典tagId。
要查找特定选项卡选项的当前值 X,请使用参数“option=X” 调用此方法,该方法将返回该选项卡选项的值。
要为描述的子项设置一个或多个选项卡选项tagId,请使用关键字参数调用此方法。例如,如果self.nb 是 Notebook,则此调用将更改第一个选项卡上显示的文本:

self.nb.tab(0, text=‘Crunchy frog’)
tabs() 此方法返回的列表窗口名称中的Notebook的子窗格中,从第一个到最后的次序。

以下是.add()和 .tab()方法中使用的选项卡选项。
ttk.Notebook 小部件的选项卡选项。

选项 说明
compound 如果同时提供image并text显示在选项卡上,该compound选项指定如何显示它们。
允许值描述相对于文本的图像的位置,并且可以是任何的 tk.BOTTOM , tk.TOP , tk.LEFT , tk.RIGHT ,或 tk.CENTER
例如, compound=tk.LEFT 将图像定位在文本的左侧。
padding 使用此选项可在面板内容的所有四个边上添加额外空间。该值是一个维度。例如, padding=’ 0. 1i’将在面板内容的每一侧添加0.1“空间。
sticky 如果面板内容未完全填充面板区域,请使用此选项指定面板内容的位置。值与sticky描述的参数相同。例如, sticky=tk. E+tk.S将内容放在右下角(东南角)。
image 要使图形图像显示在选项卡上,请提供图像image作为此选项的值。请参阅compound 上面的选项以指定两者的相对位置image和text指定两者的相对位置。
text 选项卡上显示的文本。
underline 如果此选项具有非负值n,则选项卡上文本的位置n处的字符下方将显示下划线
add(child,** ****kw)

添加子窗口到Notebook控件。通常这个child是一个Frame或者LabelFrame。此子窗口或者控件不需要pack或者grid。Notebook控件会默认添加一个Tab,来容纳这个子控件。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label')
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
root.mainloop()
forget(tab_id)

forget方法是彻底的删除以tab_id为索引的Tab,也包括与之有关的所有子控件。这里的删除是指与Tab的关联,而不是这些子控件不在可用。实际上,这些被删除关联的子控件,还可以重新与Tab相关联,只需要简单使用add()就可以了。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3,sticky=tk.E)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
def forget():
    nb.forget(0)
button2=tk.Button(root,text='Forget',command=forget)
button2.pack()
def add():
    nb.add(tab1,text='重新添加tab1')
button3=tk.Button(root,text='Add',command=add)
button3.pack()
root.mainloop()
hide(tab_id)

hide的方法与forget类似,区别是hide并没有删除子控件与Tab的关联,而只是隐藏了Tab以及其中的内容。可以简单的使用add()恢复Tab的显示。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3,sticky=tk.E)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
def hide():
    nb.hide(0)
button2=tk.Button(root,text='Hide',command=hide)
button2.pack()
def add():
    nb.add(tab1,text='恢复显示tab1')
button3=tk.Button(root,text='Add',command=add)
button3.pack()
root.mainloop()

说明:hide之后使用add,Tab的索引等都不改变,显示的位置也不变。这与使用forget之后再调用add是不同的。

index(tab_id)

返回tab_id代表的Tab的数字索引值。tab_id应该输入的是一个字符或者其他形式的Tab标识方法。
注意:如果输入的参数是’end’,返回值是所有Tab的总数,而不是最后一个Tab的索引。

insert(pos, child, **kw)

在pos指定的位置插入子控件。与add的唯一区别是指定在何处插入子控件。pos的取值可以是:
(1)已经加入到Notebook的控件(使用add或者insert加入的控件,比如下面代码中的tab1等)
(2)‘end’。标识在所有Tab的后面插入新的子控件,相当于调用add()

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3,sticky=tk.E)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab2,text='标签1')
label1.pack()
button1=tk.Button(tab1,text='按钮1',width=20,state=tk.DISABLED)
button1.pack()
tab3=tk.Frame(nb)
entry1=tk.Entry(tab3)
entry1.pack()
def insert():
    nb.insert(tab2,tab3,text='插入的Tab')
button3=tk.Button(root,text='Insert',command=insert)
button3.pack()
root.mainloop()
select(tab_id)

选择tab_id代表的Tab,并显示其中的内容。相当于鼠标点击了相应的Tab。
tab_id的取值:
(1)Tab数值索引
(2)Tab子控件索引
(3)None 显示当前的Tab

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3,sticky=tk.E)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
tab3=tk.Frame(nb)
entry1=tk.Entry(tab3)
entry1.pack()
def select():
    nb.select(tab2)
button3=tk.Button(root,text='Select',command=select)
button3.pack()
root.mainloop()
tab( tab_id, option=None, **kw)

tab的方法有两种作用:
(1)设置Tab的属性参数
需要输入tab_id以及相应的属性键值对。比如:
nb.tab(tab1,text=‘新名字’)

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3,sticky=tk.E)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
tab3=tk.Frame(nb)
entry1=tk.Entry(tab3)
entry1.pack()
def tab():
    nb.tab(tab1,text='新名字')
button3=tk.Button(root,text='Tab',command=tab)
button3.pack()
root.mainloop()

说明:点击’Tab’按钮后,第一个Tab的标签改为’新名字’

(2)获取Tab的属性参数字典
如果只输入tab_id,那么返回的是Tab的属性参数字典。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
tab3=tk.Frame(nb)
entry1=tk.Entry(tab3)
entry1.pack()
def tab():
    print(nb.tab(1))
button3=tk.Button(root,text='Tab',command=tab)
button3.pack()
root.mainloop()
{'padding': [0], 'sticky': 'nsew', 'state': 'normal', 'text': 'Button', 'image': '', 'compound': 'none', 'underline': -1}
tabs()

返回当前Notebook的Tab列表,列表中包含所有的Tab。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root)
tab1=tk.Frame(nb)
nb.add(tab1,text='Label',underline=3)
tab2=tk.Frame(nb)
nb.add(tab2,text='Button')
nb.pack()
label1=tk.Label(tab1,text='标签1')
label1.pack()
button1=tk.Button(tab2,text='按钮1',width=20)
button1.pack()
tab3=tk.Frame(nb)
entry1=tk.Entry(tab3)
entry1.pack()
def tabs():
    print(nb.tabs())
button3=tk.Button(root,text='Tabs',command=tabs)
button3.pack()
root.mainloop()
('.!notebook.!frame', '.!notebook.!frame2')
enable_traversal()

调用该方法后,可以使用如下的热键:
(1)Control+Tab键
选择下一个Tab。如果当前的Tab已经是最后一个,那么会跳到第一个Tab中。与Tab键的区别是什么?如果按动Tab键,是在当前Tab子控件中跳转。
(2)Shift-Control-Tab
与Control+Tab键相反,按下Shift-Control-Tab后是向前跳转。如果已经是第一个Tab了,会跳转到最后一个Tab。
(3)Alt+x
可以为Tab定义热键,直接跳转到指定的Tab。热键的定义方法如下:
(1)使用text定义Tab的名字
(2)使用underline定义热键(显示下划线)
(3)按动Alt+x,就可以使用热键了

注:(1)和(2)是默认的选项了。不调用enable_traversal()也可以使用,但是热键的定义,必须显式调用enable_traversal()才能实现。

通过add添加frame选项卡后,直接将notebook放置皆可。不需要将frame再次放置(pack/gard/place),frame下的组件使用方法同其他组件正常放置即可

import tkinter as tk
from tkinter import ttk  #装载tkinter.ttk模块,用于Python3
root =tk.Tk()  # 创建窗口对象
root.title(string = 'ttk.Notebook演示')  #设置窗口标题
root.geometry('400x300+200+200')
tabControl = ttk.Notebook(root)  #创建Notebook
tab1 = tk.Frame(tabControl,bg='blue')  #增加新选项卡
tabControl.add(tab1, text='信息窗')  #把新选项卡增加到Notebook
tab2 = tk.Frame(tabControl,bg='yellow')
tabControl.add(tab2, text='综合信息')
tab3 = tk.Frame(tabControl,bg='green')
tabControl.add(tab3, text='技术分析')
tab4 = tk.Frame(tabControl,bg='blue')
tabControl.add(tab4, text='编写代码')
tab5 = tk.Frame(tabControl,bg='blue') 
tabControl.add(tab5, text='模拟回测')
tab6 = ttk.Frame(tabControl) 
tabControl.add(tab6, text='双色球')
tab7 = ttk.Frame(tabControl) 
tabControl.add(tab7, text='大乐透')
tabControl.pack(expand=1, fill="both")
tabControl.select(tab1) #选择tab1
root.mainloop()     # 进入消息循环
				
文章目录Notebook 基本概念Notebook 基本应用绑定选项卡与子控件内容 Notebook 基本概念   Notebook 是一个Widget 容器控件,这个控件的特点就是有许多选项卡,当选择不同选项卡时可以看到不同的子控件内容,也可以当做子窗口内容,Notebook 是属于tkinter.ttk模块的控件 构造方法如下: Notebook(父对象, options) 第一个...
Tkinter打造GUI开发工具(19)ttk.Notebook笔记本小部件 ttk.Notebook笔记本组件类似多页的Frame,通过点击顶部标签的选项卡选择不同容器。笔记本小部件的目的是提供一个区域,用户可以通过单击区域顶部的选项卡来选择内容页面,如下所示: 每次用户单击其中一个选项卡时,窗口小部件将显示 与该选项卡关联的子窗格。通常,每个窗格都是 Frame窗口小部件,但窗格可以是任何窗...
def __init__(self,master): self.notebook = ttk.Notebook(master) self.frame1 = tk.Frame(master) self.frame2
tix和ttk控件介绍ttk.NoteBook控件ttk.Treeview控件form表格几何管理器tix.Balloon气球窗口控件tix.ButtonBox按钮框控件tix.combobox组合框控件tix.control控制窗口组件 tix库提供了tk库缺失的常用小控件,如hlist控件,combobox控件,control控件和各种可滚动的小控件,借助tix超级控件可以设计出更加美观的应用程序。 ttk提供了一种与平台无关的窗口工具包 ttk.NoteBook控件 import tkinter
Label(win, text="分隔一下").pack() tkinter.Button(win, width=20, text="点击后没有虚框", activeforeground="#fff").pack() Label(win, text="分隔一下").pack() Button(text="完美解决", takefocus=False).pack() win.mainloop()
47-输入和显示- 仪表盘控件QDial m0_73850043: 刻度旁边怎么显示当前刻度的数值呢 148-QPainter和Graphics/View绘图-Graphics/View绘图- 代理控件和图形控件 你也想起舞: 博主你好,外部程序(第三方exe)装入qwidget,再将widget嵌入QGraphicsProxyWidget 中,widget消失,这种情况怎么解决呢 7-Tkinter 组件-`LabelFrame`标签框架控件 彼岸qwq: 设置字体font时会报错unknown option "-font" 39-tkinter-ttkbootstrap-样式- Button按钮 m0_73920831: 博主,你知道怎么取消那个虚环线吗