You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何单独修改ttk Notebook各标签的文字大小与颜色?

单独修改ttk Notebook特定标签的样式

嘿,我明白你的需求——你已经能全局修改Notebook标签的样式,但想要给不同标签设置不一样的文字颜色、大小对吧?ttk的Notebook默认让所有标签共享同一个TNotebook.Tab样式,但我们可以通过创建自定义样式子类的方式,给单个标签单独指定样式,完美解决这个问题!

具体实现步骤

1. 创建自定义样式

首先,我们基于默认的TNotebook.Tab创建几个自定义样式,每个样式对应我们想要的不同外观:

style = ttk.Style()

# 自定义样式1:红色加粗文字
style.configure('RedBold.TNotebook.Tab', 
                foreground='red', 
                font=('Arial', 10, 'bold'))

# 自定义样式2:大号蓝色文字
style.configure('BigBlue.TNotebook.Tab', 
                foreground='darkblue', 
                font=('Helvetica', 12))

# 自定义样式3:灰色背景+白色文字
style.configure('GrayBgWhiteText.TNotebook.Tab', 
                foreground='white', 
                background='gray50',
                font=('Arial', 9))

2. 给特定标签应用自定义样式

在添加标签的时候,通过style参数指定对应的自定义样式即可;如果是已经添加好的标签,也可以用note.tab()方法修改它的样式。

修改后的完整代码:

from tkinter import *
from tkinter import ttk

window = Tk()
style = ttk.Style()
note = ttk.Notebook(window)

# 创建自定义样式
style.configure('RedBold.TNotebook.Tab', foreground='red', font=('Arial', 10, 'bold'))
style.configure('BigBlue.TNotebook.Tab', foreground='darkblue', font=('Helvetica', 12))
style.configure('GrayBgWhiteText.TNotebook.Tab', foreground='white', background='gray50', font=('Arial', 9))

# 创建标签页
window.tab1 = ttk.Frame(note)
window.tab2 = ttk.Frame(note)
window.tab3 = ttk.Frame(note)
window.tab4 = ttk.Frame(note)

# 添加标签时指定自定义样式
note.add(window.tab1, text="Home ", style='BigBlue.TNotebook.Tab')
note.add(window.tab2, text="Disconnected ", style='RedBold.TNotebook.Tab')
note.add(window.tab3, text="Alarm ", style='GrayBgWhiteText.TNotebook.Tab')
note.add(window.tab4, text="")  # 这个用默认样式

# 如果要修改已添加的标签样式,可以这样做(示例)
# note.tab(window.tab4, text="Settings", style='BigBlue.TNotebook.Tab')

note.pack(fill=BOTH, expand=True)
window.mainloop()

关键说明

  • ttk的样式是继承式的,我们创建的RedBold.TNotebook.Tab会继承TNotebook.Tab的所有默认属性,只覆盖我们指定的foregroundfont,这样不用重复设置所有样式。
  • 如果你需要动态修改标签样式(比如某个状态变化时改变颜色),可以随时调用note.tab(target_tab, style='新样式名')来切换。
  • 不同平台的ttk主题对样式的支持可能略有差异,如果某些样式不生效,可以尝试切换主题(比如style.theme_use('clam'))来测试。

内容的提问来源于stack exchange,提问作者Akash Nil

火山引擎 最新活动