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

用Tkinter打造GUI开发工具(19)ttk.Notebook笔记本小部件
ttk.Notebook笔记本组件类似多页的Frame,通过点击顶部标签的选项卡选择不同容器。笔记本小部件的目的是提供一个区域,用户可以通过单击区域顶部的选项卡来选择内容页面,如下所示:
每次用户单击其中一个选项卡时,窗口小部件将显示 与该选项卡关联的子窗格。通常,每个窗格都是 Frame窗口小部件,但窗格可以是任何窗口小部件。
当前显示的子窗格的选项卡称为选定选项卡。
您将使用Notebook窗口小部件的.add()方法附加新选项卡及其相关内容。其他方法允许您删除或暂时隐藏选项卡。
每个选项卡都有自己的一组选项来控制其外观和行为。
要将Notebook窗口小部件创建为某个窗口小部件的子parent窗口,请使用以下构造函数:
w= ttk.Notebook(parent,option= value,...)
1
ttk.Notebook选项包括:

ttk.Notebook小部件上的方法包括所有ttk小部件共有的方法”中描述的所有方法,以及以下方法:
.add(child, **kw)
1
该child 参数是一个小部件,通常Frame,它包装一个子窗格中的内容。如果child不是Notebook窗口小部件的子窗格之一,child则添加为下一个可用选项卡,关键字参数kw定义新窗格的选项卡选项。这些选项在表51“ ttk.Notebook 小部件的选项卡选项”中定义。
如果child是当前隐藏的窗格,则该选项卡将重新显示在其以前的位置。
.enable_traversal()
1
一旦调用此方法,一些额外的键绑定将起作用:
Control-Tab将在当前选择的选项卡后选择选项卡。如果当前选择了最后一个选项卡,则选择将旋转回第一个选项卡。
Shift-Control-Tab执行相反操作:它移动到上一个选项卡,如果选择了第一个选项卡,则环绕到最后一个选项卡。
您可以配置直接选择选项卡的特定热键。要执行此操作,请使用text和underline选项卡选项为每个选项卡中的一个字符加下划线。然后,用户可以通过键入Alt-跳转到选项卡,x其中 x是该选项卡上带下划线的字符。
如果Notebook在同一个应用程序中有多个小部件,则除非创建每个子窗格小部件并将其Notebook窗口小部件作为父窗口小部件,否则这些功能将无法正常工作。
.forget(child)
1
此方法child从窗口小部件的选项卡集中永久删除指定的内容。
.hide(tabId)
1
标识的选项卡tabId暂时从中显示的可见选项卡集中删除Notebook。您可以通过.add() 再次调用该方法来恢复它。
.index(tabId)
1
对于给定的tabId,此方法返回相应选项卡的数字索引。有一个例外:如果参数是字符串"end",则该方法将返回选项卡的总数。
.insert(where, child,**kw)
1
此方法使用任何关键字参数将窗口小部件插入到child指定的位置 where,以描述新选项卡和窗格。有关关键字选项,请参阅表51“ ttk.Notebook 小部件的选项卡选项”。
该where 参数可以是任何的:
“end” 在所有现有选项卡之后放置新选项卡。
现有的子窗口小部件; 在这种情况下,new child就在现有小部件之前插入。
.select([tabId])
1
如果在没有参数的情况下调用此方法,它将返回当前显示其选项卡的窗口小部件的窗口名称。
要显示特定窗格Notebook,请使用a tabId作为参数调用此方法。
.tab(tabId, option=None, **kw)
1
使用此方法可以为所描述的子窗格设置选项卡选项tabId,或者找出为该子窗格设置的选项。
如果您调用没有关键字参数的方法,它将返回当前对指定的窗格有效的选项卡选项的字典tagId。
要查找特定选项卡选项的当前值 X,请使用参数“option=X” 调用此方法,该方法将返回该选项卡选项的值。
要为描述的子项设置一个或多个选项卡选项tagId,请使用关键字参数调用此方法。例如,如果self.nb 是 Notebook,则此调用将更改第一个选项卡上显示的文本:
self.nb.tab(0, text=‘Crunchy frog’)
.tabs()
1
此方法返回的列表窗口名称中的Notebook的子窗格中,从第一个到最后的次序。
以下是.add()和 .tab()方法中使用的选项卡选项。
ttk.Notebook 小部件的选项卡选项。

ttk.Notebook 小部件的虚拟事件。每当选定的选项卡在ttk.Notebook小部件中更改时,它都会生成“ <>”虚拟事件。
下面看一个ttk.Notebook 小部件的演示程序.
# -*- coding: utf-8 -*-
import tkinter as tk  #装载tkinter模块,用于Python3
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()     # 进入消息循环
1234567891011121314151617181920212223242526272829
程序运行结果如下图。

上面程序我们混合使用了tk和ttk的Frame组件。
ttk.Notebook为我们的Tkinter增加了一个新的功能部件,但是这个部件的Tab名只能在左上角显示,我们无法把它移动到左下角。
因此我们对 ttk.Notebook不满意,可以自己设计一个Notebook2组件。
下面看我把我在HP_tk2中设计的Notebook2组件类展示给大家,大家可以参照此组件类设计更多的新组件。
# -*- coding: utf-8 -*-
import tkinter as tk  #装载tkinter模块,用于Python3
from tkinter import ttk  #装载tkinter.ttk模块,用于Python3

#------------HP_tk2中Notebook2模块
class Notebook2(tk.Frame): # 继承Frame类的Notebook类
def __init__(self, master=None,m=0,anchor=tk.NW, size=9,width=10,**kw):
tk.Frame.__init__(self, master,**kw)
self.root = master #定义内部变量root
self.m=m
self.width=width
self.size=size
self.anchor=anchor
self.s1=tk.TOP
self.s2=tk.BOTTOM
if (self.anchor in [tk.SW,tk.S,tk.SE]):
self.s1=tk.BOTTOM
self.s2=tk.TOP
self.t=[]
self.v=[]
self.view=None
self.pack(side=self.s2, fill=tk.BOTH, expand=1,ipady=1,pady=1,ipadx=1,padx=1)

self.tab()


def add(self,tab=None,text=''):
if (tab!=None):
self.m=self.m+1
def handler (self=self, i=self.m-1 ):
self.select(i)

if (self.anchor in [tk.NW,tk.N,tk.SW,tk.S]):
self.button = tk.Button(self.tab, width=self.width,text=text, cursor='hand2',
anchor=tk.S,
font=('Helvetica', '%d'%self.size),
command=handler)
self.t.append(self.button)
self.button.pack(side=tk.LEFT)
self.v.append(tab)
if (self.m==1):
self.select(0)


if (self.anchor in [tk.NE,tk.SE]):
self.button = tk.Button(self.tab, width=self.width,text=text, cursor='hand2',
anchor=tk.S,
font=('Helvetica','%d'%self.size),
command=handler)
self.t.append(self.button)
self.button.pack(side=tk.RIGHT)
self.v.append(tab)
if (self.m==1):
self.select(0)


def tab(self):
self.tab=tk.Frame(self)
if (self.anchor in [tk.N,tk.S]):
self.tab.pack(side=self.s1)
if (self.anchor in [tk.NW,tk.NE,tk.SW,tk.SE]):
self.tab.pack(side=self.s1,fill=tk.X)


for i in range(self.m):
def handler (self=self, i=i ):
self.select(i)
self.button = tk.Button(self.tab, width=self.width,text='Tab%d'%i, cursor='hand2',
anchor=tk.S,
font=('Helvetica','%d'%self.size),
command=handler)
self.t.append(self.button)
self.v.append(None)
if (self.anchor in [tk.NW,tk.SW]) :
self.button.pack(side=tk.LEFT)
else:
self.button.pack(side=tk.RIGHT)

self.update()


def frame(self):
self.frame=tk.Frame(self,bd=2,
borderwidth=2,  #边框宽度
padx=1,  #部件x方向间距
pady=1, #部件y方向间距
)
self.frame.pack(side=self.s2,fill=tk.BOTH, expand=1)


def select(self,x):
print(x)
if (self.view!=None):
self.view.pack_forget()
for i in range(self.m):
self.t[i]['relief']=tk.RIDGE
self.t[i]['anchor']=tk.S
self.t[i]['bg']="#F0F0ED"

self.t[x]['anchor']=tk.N
self.t[x]['bg']='white'
self.view=self.v[x]
if (self.view!=None):
self.view.pack(fill=tk.BOTH, expand=1)


def modify(self,x,tab=None,text=''):
if (x>self.m-1):
return
if (tab!=None):
self.v[x]=tab
if (text!=''):
self.t[x]['text']=text
#------上面是class Notebook2定义

root =tk.Tk()  # 创建窗口对象
root.title(string = 'ttk.Notebook演示')  #设置窗口标题
root.geometry('800x600+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
#---------------演示1------------------------------------
mytabControl=Notebook2(tab1,anchor=tk.SW)
mytab1 = tk.Frame(mytabControl,bg='red')  #增加新选项卡
mytabControl.add(mytab1,text='信息1')
mytab2 = tk.Frame(mytabControl,bg='blue')  #增加新选项卡
mytabControl.add(mytab2,text='信息2')
mytab3 = tk.Frame(mytabControl,bg='yellow')  #增加新选项卡
mytabControl.add(mytab3,text='信息3')
#---------------演示2------------------------------------
mytabControl2=Notebook2(tab2,m=3)
mytabControl3=Notebook2(tab3,m=4,anchor=tk.SW)
mytabControl4=Notebook2(tab4,m=5,anchor=tk.S)
mytabControl5=Notebook2(tab5,m=4,anchor=tk.N)
mytabControl6=Notebook2(tab6,m=5,anchor=tk.SE)
mytabControl7=Notebook2(tab7,m=4,anchor=tk.NE)

root.mainloop()     # 进入消息循环
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
下面是运行结果。
---------------------
作者:荷蒲
来源:CSDN
原文:https://blog.csdn.net/hepu8/article/details/90345072
版权声明:本文为博主原创文章,转载请附上博文链接!

Treeview 这个 部件 功能非常强大。 首先它是树形图和列表相结合,在第一列是它的树状结构,后面几列的是列表结构;然后每行是一个item,树这边的item可以分级,每个item可以有子item,名称对应text标签,而列表这边的item关联到对应的树item,名称对应的是values标签,values是一个列表结构;item:item就是一行数据,一个item有5个标签吧,分别是text,ima... 浏览器打开 &amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot; import tkinter win = tkinter .Tk() win.tit 浏览器打开 Tkinter 打造 GUI 开发工具 19 ttk . Notebook 笔记本 部件 ttk . Notebook 笔记本 组件类似多页的Frame,通过点击顶部标签的选项卡选择不同容器。 笔记本 部件 的目的是提供一个区域,用户可以通过单击区域顶部的选项卡来选择内容页面,如下所示: 每次用户单击其中一个选项卡时,窗口小 部件 将显示 与该选项卡关联的子窗格。通常,每个窗格都是 Frame窗口小 部件 ,但窗格可以是任何窗... 浏览器打开 第21章 Notebook 控件 Notebook 控件是定义在 ttk .py中的控件。 Notebook 控件可以管理很多窗口,但是一次只能显示一个窗口。通过点击窗口标签可以选择不同的窗口来显示。 窗口可以一般是一个由很多子控件的Frame控件。可以通过 Notebook 的add()方法添加窗口或者Tab。被选中的Tab叫’selected Tab’。也可以根据需要删除或者隐藏Tab。 21.1 属性 浏览器打开 Tkinter 打造 GUI 开发工具 (24)Tree树控件 采用 Python 自带 Tkinter 库开发 GUI 软件,学习负担为零,因此受到很多朋友喜爱。但是原始的 Tkinter 库控件比较简单,但是它为我们提供可以扩展新控件的空间。 前面课程,我为大家介绍了如何实现 ttk . Notebook ,使控制卡Tab放到下面。见下图。 用 Tkinter 打造 GUI 开发工具 19 ttk . Notebook 笔记本 部件 浏览器打开 Tkinter 打造 GUI 开发工具 (15) Tkinter 部件 的Button按钮 部件 Tkinter 中,Button按钮 部件 也会经常用到,这节我们详细讲解Button 部件 的属性和用法。 Button小 部件 是一个标准的 Tkinter 部件 ,用于实现各种按钮。按钮可以包含文本或图像,您可以调用 Python 函数或方法用于每个按钮。 Tkinter 的按钮被按下时,会自动调用该函数或方法。该按钮可以只显示... 浏览器打开 Tkinter 打造 GUI 开发工具 (10) Tkinter 部件 的pack布局 Tkinter 共有三种小 部件 的几何布局管理器,分别是:pack布局,grid布局,place布局。通过几何布局管理器控制窗体或容器中各个小 部件 的位置关系。首先介绍小 部件 的pack布局。 使用pack()方法的时候,默认先使用的放到上面,然后依次向下排,它会给我们的 部件 一个自认为合适的位置和大小,这是默认方式。pack(... 浏览器打开 Tkinter 打造 GUI 开发工具 (6)小 部件 颜色 Tkinter 部件 的常用属性是颜色属性,activebackground、activeforeground、background、foreground、highlightbackground、highlightcolor等颜色属性。 Tkinter 的颜色用字符串表示,有两种颜色表示方法。 1) Tkinter 系统定一个了一些颜色字符串。如:‘w... 浏览器打开