You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:39:18