如何单独修改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的所有默认属性,只覆盖我们指定的foreground和font,这样不用重复设置所有样式。 - 如果你需要动态修改标签样式(比如某个状态变化时改变颜色),可以随时调用
note.tab(target_tab, style='新样式名')来切换。 - 不同平台的ttk主题对样式的支持可能略有差异,如果某些样式不生效,可以尝试切换主题(比如
style.theme_use('clam'))来测试。
内容的提问来源于stack exchange,提问作者Akash Nil




