Python tkinter Notebook如何为各选项卡设置独立背景颜色
问题原因
原代码不生效的核心逻辑:ttk默认样式类TNotebook.Tab为全局生效配置,每次调用configure修改该样式的background属性都会覆盖之前的设置,最终所有标签都会应用最后一次赋值的红色,无法通过反复修改默认样式实现单标签独立配色。
另外Windows默认的vista主题、macOS默认的aqua主题对Notebook标签自定义背景色支持有限,需先切换到兼容性最好的clam主题才能保证样式正常渲染。
实现代码
核心思路是先创建不同的自定义标签样式类,再给每个标签页单独绑定对应的样式:
from tkinter import * from tkinter import ttk mygreen = "#d2ffd2" myred = "#dd0202" root = Tk() # 初始化样式配置 style = ttk.Style() # 切换到支持自定义标签颜色的clam主题 style.theme_use("clam") # 定义红色标签样式,可按需配置选中态效果 style.configure("Red.TNotebook.Tab", background=myred, padding=[10, 2]) style.map("Red.TNotebook.Tab", background=[("selected", "#ff4444")], foreground=[("selected", "white")]) # 定义绿色标签样式 style.configure("Green.TNotebook.Tab", background=mygreen, padding=[10, 2]) style.map("Green.TNotebook.Tab", background=[("selected", "#76ee76")], foreground=[("selected", "black")]) tabsystem = ttk.Notebook(master=root) text1 = Text(tabsystem, state=DISABLED) text2 = Text(tabsystem, state=DISABLED) text3 = Text(tabsystem, state=DISABLED) # 添加标签页并单独绑定对应样式 tabsystem.add(text1, text="Text 1") tabsystem.tab(text1, style="Red.TNotebook.Tab") tabsystem.add(text2, text="Text 2") tabsystem.tab(text2, style="Green.TNotebook.Tab") tabsystem.add(text3, text="Text 3") tabsystem.tab(text3, style="Red.TNotebook.Tab") tabsystem.grid(row=0, padx=10, pady=10) mainloop()
关键说明
- 自定义样式名必须遵循
[自定义名].TNotebook.Tab的命名格式,才能被ttk识别为Notebook标签样式 Notebook.tab(标签页组件, style=样式名)方法可以为指定的单个标签页分配独立样式,不会影响其他标签- 代码里的
style.map是可选配置,用来设置标签选中、悬停等不同状态下的显示效果,可以根据需求自行调整颜色值
内容的提问来源于stack exchange,提问作者Christof Bodner
相关产品推荐
相关产品推荐

