使用azure-dark ttk主题时修改ttk Combobox控件背景色无效问题
问题原因
Azure-ttk-theme深色主题加载时会覆盖ttk控件的默认样式规则,直接调用style.configure修改TCombobox默认属性会被主题内置配置覆盖,所以看不到效果,不需要修改tcl源文件,在Python代码侧即可完成自定义配置。
正确配置方法
样式配置代码必须放在主题加载完成(即set_theme调用)之后执行,且不要直接修改默认的TCombobox样式,自定义带后缀的样式名避免被主题规则覆盖,完整可运行代码如下:
from tkinter import * from tkinter import ttk from pathlib import Path # 替换为本地azure.tcl文件的实际存放路径 SYSTEM_DIR = Path(__file__).parent root = Tk() style = ttk.Style(root) root.tk.call("source", SYSTEM_DIR / "azure.tcl") root.tk.call("set_theme", "dark") # 自定义Combobox样式 style.configure("Custom.TCombobox", fieldbackground="orange", # 输入框区域背景 background="white", # 下拉按钮区域背景 foreground="black", # 输入文字颜色 arrowcolor="black" # 下拉箭头颜色 ) # 单独配置下拉弹出列表的配色 root.option_add("*TCombobox*Listbox.background", "white") root.option_add("*TCombobox*Listbox.foreground", "black") g_combo = ttk.Combobox(root, style="Custom.TCombobox", values=["测试选项1", "测试选项2", "测试选项3"]) g_combo.pack(padx=20, pady=20) root.mainloop()
其他控件配色调整提示
- tk原生的
Text控件不属于ttk控件,无法通过ttk.Style修改样式,初始化时直接传参即可:text = Text(root, bg="#202020", fg="white", insertbackground="white"),其中insertbackground为输入光标颜色,深色主题下需要设为浅色否则不可见。 - 如果需要全局修改所有Combobox的样式,不需要逐个指定style,可调用
style.theme_settings("azure-dark", {"TCombobox": {"configure": {"fieldbackground": "orange", "background": "white"}}})直接覆盖主题默认规则。

内容的提问来源于stack exchange,提问作者Prakhar Jhudele
相关产品推荐
相关产品推荐

