【Python GUI 编程】tkinter:Ttk 选项卡 Notebook

news/2024/12/21 10:54:31/文章来源:https://www.cnblogs.com/o-O-oO/p/18620521

在本文中,将介绍如何使用 Tkinter Notebook 小部件创建选项卡。

Notebook 是由 Tkinter Ttk 模块引入的强大小部件。允许开发者创建包含多个选项卡的界面,每个选项卡可以包含不同的内容。

创建 Notebook 小部件,请使用如下构造函数:

notebook = ttk.Notebook(master,**kw)

添加选项卡

有两种方式可以为 Notebook 小部件添加选项卡。使用add() 方法,在末尾附加一个新选项卡。使用insert() 方法,可将选项卡添加到特定位置。

add() 方法

add(child, **kwargs)

insert() 方法

insert(location, child, **kwargs)
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Notebook 选项卡演示')
label = ttk.Label(root, text = "选项卡演示")
label.pack(ipadx=5, ipady=5)notebook = ttk.Notebook(root)
notebook.pack(fill='both', expand=True)frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)label1 = ttk.Label(frame1, text = "第一个选项卡区域")
label1.pack(expand=True)
label2 = ttk.Label(frame2, text = "第二个选项卡区域")
label2.pack(expand=True)frame1.pack(fill='both', expand=True)
frame2.pack(fill='both', expand=True)
# 方法1
notebook.add(frame1, text='选项卡1')
notebook.add(frame2, text='选项卡2')frame3 = ttk.Frame(notebook)         
label3 = ttk.Label(frame3, text = "第三个选项卡区域")
label3.pack(expand=True)
frame3.pack(fill= tk.BOTH, expand=True)
# 方法2
notebook.insert("end", frame3, text = "选项卡3")root.mainloop()

访问选项卡

select()

select() 方法,不带任何参数将返回当前选定的选项卡。使用参数可以切换选项卡。

select(tab_id)

tab() 方法

tab() 方法,可以通过选项卡的 ID 访问选项卡的某些选项。

tab(tab_id, **kwargs)
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Notebook 选项卡演示')
def tab_selected(event):tab_id = notebook.select()tab_text = notebook.tab(tab_id, 'text')label2['text'] = tab_textframe = ttk.Frame(root)
label1 = ttk.Label(frame, text = "当前选项卡:")
label1.pack(side=tk.LEFT,)
label2 = ttk.Label(frame, text = "")
label2.pack()
frame.pack()notebook = ttk.Notebook(root)
notebook.pack(fill='both', expand=True)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)label3 = ttk.Label(frame1, text = "第一个选项卡区域")
label3.pack(expand=True)
label4 = ttk.Label(frame2, text = "第二个选项卡区域")
label4.pack(expand=True)frame1.pack(fill='both', expand=True)
frame2.pack(fill='both', expand=True)
notebook.add(frame1, text='选项卡1')
notebook.add(frame2, text='选项卡2')
notebook.bind("<<NotebookTabChanged>>", tab_selected)
# 默认选择第二个选项卡
notebook.select(1)
root.mainloop()

自定义选项卡

将图像添加到选项卡标题

使用 Notebook 的image 选项,将图片添加到选项卡的标题

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Notebook 选项卡演示')
label1 = ttk.Label(root, text = "自定义选项卡")
label1.pack()
notebook = ttk.Notebook(root)
notebook.pack(fill='both', expand=True)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
label3 = ttk.Label(frame1, text = "第一个选项卡区域")
label3.pack(expand=True)
label4 = ttk.Label(frame2, text = "第二个选项卡区域")
label4.pack(expand=True)
frame1.pack(fill='both', expand=True)
frame2.pack(fill='both', expand=True)
tab_image = tk.PhotoImage(file = "exit.png")
notebook.add(frame1, text='选项卡1', image = tab_image, compound = "left")
notebook.add(frame2, text='选项卡2')
root.mainloop()

垂直方向选项卡

自定义 Ttk Notebook 样式,设置参数tabposition 为wn,创建垂直方向选项卡。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Notebook 选项卡演示')label1 = ttk.Label(root, text = "自定义选项卡")
label1.pack()
style = ttk.Style()
style.configure("Custom.TNotebook", tabposition="wn")  
notebook = ttk.Notebook(root, style="Custom.TNotebook")
notebook.pack(fill='both', expand=True)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
label3 = ttk.Label(frame1, text = "第一个选项卡区域")
label3.pack(expand=True)
label4 = ttk.Label(frame2, text = "第二个选项卡区域")
label4.pack(expand=True)
frame1.pack(fill='both', expand=True)
frame2.pack(fill='both', expand=True)
notebook.add(frame1, text='选项卡1')
notebook.add(frame2, text='选项卡2')
root.mainloop()

更改主题美化选项卡

使用theme_create() ,style.theme_use 自定义更改当前主题,美化选项卡。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Notebook 选项卡演示')
style = ttk.Style()
style.theme_create( "dummy", parent="alt", settings={"TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0] } },"TNotebook.Tab": {"configure": {"padding": [5, 1], "background": "#DCF0F2" },"map": {"background": [("selected", "#F2C84B")], "expand": [("selected", [1, 1, 1, 0])] } } } )
style.theme_use("dummy")notebook = ttk.Notebook(root)
notebook.pack(fill='both', expand=True)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
label3 = ttk.Label(frame1, text = "第一个选项卡区域")
label3.pack(expand=True)
label4 = ttk.Label(frame2, text = "第二个选项卡区域")
label4.pack(expand=True)
frame1.pack(fill='both', expand=True)
frame2.pack(fill='both', expand=True)
notebook.add(frame1, text='选项卡1')
notebook.add(frame2, text='选项卡2')
root.mainloop()

原创 信息技术资源 信息科技云课堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856264.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在虚拟机里执行protoc报非法指令( Illegal instruction)

问题 在x86虚拟机里编译perfetto的时候遇到执行protoc报非法指令,但是在host上编译的时候并没有这样的问题 原因 虽然虚拟机和宿主机都是同一个指令集架构,但是CPU在一些特殊指令上的支持还是有区别的,如果Host可以,但是虚拟机上不行,可能就是虚拟机CPU不支持某些特性,导…

中考阅读理解深入逻辑分析-001 A Dine to Remember 难忘的一餐

中考阅读理解深入逻辑分析-001 A Dine to Remember 难忘的一餐 文章正文 It was a few years ago. A friend had sent me a restaurant gift card for Christmas and I had picked a sunny Sunday afternoon to use it. It felt good taking my two grown sons and daughter to…

HTTP协议及安全防范

HTTP(Hypertext Transfer Protocol)超文本传输协议是一个用于 Web 应用程序通信的应用层协议。它是一种客户端-服务器协议,客户端通过发送请求到服务器来获取资源,服务器则根据请求返回响应。HTTP 协议通常使用 TCP作为传输协议,但也可以使用其它传输协议 由于图片解析问题…

LDA主题模型——原理和模型(二)

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 主题模型是用于发现文档集合中隐含主题的统计模型,主题可以定义为“文档集中具有相同词境的词的集合模式”。主题模型克服了传统信息检索中文档相似度计算方…

LDA主题模型——贝叶斯分布与其共轭(一)

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 贝叶斯分布理论是统计推断的重要分支,其核心思想是利用贝叶斯定理,将先验知识与新观测数据结合,从而动态更新对未知参数的认识。这一理论框架以概率为基础…

pytest+requests+allure测试框架中,如何实现用例的数据驱动取出来的数据同步到fixture中,作为参数使用

1、在 pytest 中,如果你有多个数据驱动的 fixture 和测试用例,并希望确保它们的数据同步传递(即每个 fixture 和测试用例的数据对是一一对应的),你可以使用 pytest.mark.parametrize 来参数化测试函数和 fixture。为了确保 fixture 和测试函数中的数据同步传递,可以将它们…

webman: 使用模板引擎twig

一,安装 $ composer require twig/twig 二,配置 config/view.php <?php /*** This file is part of webman.** Licensed under The MIT License* For full copyright and license information, please see the MIT-LICENSE.txt* Redistributions of files must retain th…

读图数据库实战笔记09性能与反模式

性能与反模式1. 熵 1.1. 熵是物理学上的一个术语,本质上是一个系统“内在的混乱程度”​ 1.2. 是我们的敌人 2. 执行缓慢的遍历 2.1. 和关系数据库一样,图数据库对于执行缓慢的操作并不陌生 2.2. 图也有帮助诊断问题的工具2.2.1. 解释一个遍历会做什么2.2.2. 分析一个遍历做了…

广义少镜头分割的视觉提示:一种多尺度方法

广义少镜头分割的视觉提示:一种多尺度方法 5.5.1 多尺度方法概述 基于注意力的变换器模型的出现,由于其优越的泛化和传递特性,在各种任务中得到了广泛的应用。最近的研究表明,当得到适当的提示时,这些模型对于少镜头推理来说是极好的。然而,对于语义分割等密集预测任务,…

专著推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》

专著推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该书强力解析AI芯片的核心技术开发,内容翔实、知识点新颖…

【圆圆的日语教室】日语入门总复习

总复习 文字篇发音篇单词篇四季星期数字国家职业喜好家庭成员外来语儿歌篇 五十音图之歌 小星星 动物之歌 星期之歌 大大的栗子树下 数字歌 哆啦 A 梦之歌 狗狗巡警会话篇