添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

第21章 Notebook控件
Notebook控件是定义在ttk.py中的控件。Notebook控件可以管理很多窗口,但是一次只能显示一个窗口。通过点击窗口标签可以选择不同的窗口来显示。
窗口可以一般是一个由很多子控件的Frame控件。可以通过Notebook的add()方法添加窗口或者Tab。被选中的Tab叫’selected Tab’。也可以根据需要删除或者隐藏Tab。
21.1 属性

属性 描述
class_ Notebook 控件的名称
cursor 鼠标经过Notebook控件时候的形状
height Notebook控件的高度
padding 定义Notebook控件与其他控件的间隔值
style 定义Notebook控件的外观,参见24章的介绍
takefocus 定义是否可以通过Tab获得输入焦点
width Notebook控件的宽度

21.1.1 class_
Notebook的名称。
21.1.2 cursor
鼠标经过Notebook控件时候的形状。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('320x240')
nb=ttk.Notebook(root,cursor='spider')
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()

结果:
在这里插入图片描述
21.1.4 padding
定义Notebook控件与其他控件的间隔值。
21.1.3 height
Notebook控件的高度,默认单位是像素。也可以是其他的长度单位。详细说明见3.3.1节。
21.1.4 padding
设置Notebook控件与其他控件的间距。
21.1.5 style
Notebook控件的设置,如背景颜色等等。参见第24章的有关说明。
21.1.6 takefocus
是否可以通过Tab键获得输入焦点
21.1.7 width
Notebook控件的宽度,默认单位是像素。也可以是其他的长度单位。详细说明见3.3.1节。
21.2 方法

方法描述
add(child, **kw)添加标签页(Tab)
forget(tab_id)删除索引值为tab_id的标签页
hide(tab_id)隐藏索引值为tab_id的标签页
index(tab_id)返回tab_id代表的Tab的数字索引值
insert(pos, child, **kw)在pos指定的位置插入子控件
select(tab_id)选择tab_id代表的Tab,并显示其中的内容
tab( tab_id, option=None, **kw)设置Tab参数,或者返回Tab的属性字典
tabs()返回当前Notebook的Tab列表,列表中包含所有的Tab
enable_traversal()使能热键应用

21.2.1 add(child, **kw)
添加子窗口到Notebook控件。通常这个child是一个Frame或者LabelFrame。此子窗口或者控件不需要pack或者grid。Notebook控件会默认添加一个Tab,来容纳这个子控件。添加的时候,可以使用的选项见21.3节。

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()

结果:
在这里插入图片描述
注意:tab1和tab2不能pack()。否则不能正确显示Notebook。tab1和tab2的作用相当于是一个容器。
21.2.2 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()

21.2.3 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是不同的。
21.2.4 index(tab_id)
返回tab_id代表的Tab的数字索引值。tab_id应该输入的是一个字符或者其他形式的Tab标识方法。
注意:如果输入的参数是’end’,返回值是所有Tab的总数,而不是最后一个Tab的索引。
21.2.5 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()

21.2.6 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()

21.2.7 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}

21.2.8 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')

21.2.9 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()才能实现。

Tkinter中的Notebook控件相当于Windows中的TabCtrl控件,可以让用户在多可控件布局之间进行切换,下面到视频就是在Demo1,Demo2之间进行切换的例子: 由于本例中大量使用了前面两篇文的代码,这里不再重复了,只给出Notebook相关的部分。 首先是构建Notebook对象: 如何使用Treeview?最典型的就是表格和文件目录遍历。 22.3.1 表格 这个例子是一个虚拟的贸易公司销售记录。分为华北、华东、华南、东北、西北、西南和中部6个销售区域,产品分为电子产品、化妆品、快消品和日杂4个部分。 import tkinter as tk from tkinter import ttk root = tk.Tk() root.geometry('32...
Tkinter打造GUI开发工具(19)ttk.Notebook笔记本小部件 ttk.Notebook笔记本组件类似多页的Frame,通过点击顶部标签的选项卡选择不同容器。笔记本小部件的目的是提供一个区域,用户可以通过单击区域顶部的选项卡来选择内容页面,如下所示: 每次用户单击其中一个选项卡时,窗口小部件将显示 与该选项卡关联的子窗格。通常,每个窗格都是 Frame窗口小部件,但窗格可以是任何窗...
目录Notebook 基本概念Notebook 基本应用绑定选项卡与子控件内容 Notebook 基本概念   Notebook 是一个Widget 容器控件,这个控件的特点就是有许多选项卡,当选择不同选项卡时可以看到不同的子控件内容,也可以当做子窗口内容,Notebook 是属于tkinter.ttk模块的控件 构造方法如下: Notebook(父对象, options) 第一个...
第22 树形列表控件(Treeview) 树形列表控件(Treeviw)实现了一种层次化的结构数据,用户可以用鼠标打开或者隐藏相应数据或者节点。Treeview是没有根节点的,每一层都可以有很多的节点。经典的使用场景有: (1)表格 类似于其他语言的Grid控件,或者Excel表格。可以行列的形式展示数据。 (2)目录列表 实现文件目录的管理,可以展开或者折叠显示目录以及文件。 Treeview...
Describes the Tkinter widget set for constructing graphical user interfaces (GUIs) in the Python programming language. Includes coverage of the ttk themed widgets. This publication is available in Web form1 and also as a PDF document2. Please forward any comments to tcc-doc@nmt.edu.
添加Tab(标签)的时候,可以使用的属性有: 21.3.1 compound 如果在Tab的名字中,同时使用了文字和图像,使用compound来定义如何显示文字的位置。具体的用法可以参见第四Label中关于compound属性的介绍。 21.3.2 padding 定义子控件Notebook边框之间的填充距离。这个距离是在子控件四边都填充的。如下图所示。填充距离是可以指...
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