如何修改ttk.Entry选中时外围颜色并移除界面灰色块?
Ttk.Entry样式问题解决方案
原始代码
import tkinter as tk from tkinter import ttk class MainApplication(tk.Frame): def __init__(self, parent, *args, **kwargs): tk.Frame.__init__(self, parent, *args, **kwargs) style = ttk.Style() style.theme_use('clam') style.configure('TLabelframe', background='#ffffff', bordercolor='black') style.configure('TEntry', bordercolor='black') style.map('TEntry', lightcolor=[('focus', 'red')]) frame = ttk.LabelFrame(root) frame.pack(side="top", padx=20, pady=20, ipadx=20, ipady=20) entry = ttk.Entry(frame) entry.grid(row=1, column=0, ipady=5, padx=20, pady=20) if __name__ == "__main__": root = tk.Tk() root.configure(bg='#ffffff') MainApplication(root).pack(side="top", fill="both", expand=True) root.mainloop()
1. 修改Entry选中时的偏蓝外围颜色
选中Entry时的偏蓝色外围是组件获得焦点后的边框颜色,通过style.map为TEntry添加bordercolor的状态映射即可修改:
# 在原有style.map代码基础上添加bordercolor映射 style.map('TEntry', lightcolor=[('focus', 'red')], bordercolor=[('focus', 'black')]) # 替换成你需要的颜色值
如果需要统一默认边框与焦点边框样式,也可以先通过configure设置基础边框色,再用映射覆盖焦点状态:
style.configure('TEntry', bordercolor='black') style.map('TEntry', lightcolor=[('focus', 'red')], bordercolor=[('focus', '#ff0000')]) # 焦点时边框设为红色
2. 移除灰色块
这个灰色块是ttk.LabelFrame默认的标签占位区域——即便未设置标签文本,组件仍会预留标签位置,显示灰色背景。移除方式有两种:
- 方法一:统一标签区域背景色
修改TLabelframe的样式,让标签背景与主背景一致,同时给LabelFrame设置空文本:# 调整TLabelframe样式 style.configure('TLabelframe', background='#ffffff', bordercolor='black', labelbackground='#ffffff') # 创建LabelFrame时设置空文本 frame = ttk.LabelFrame(root, text='') - 方法二:彻底隐藏标签区域
通过样式设置直接关闭标签显示,消除占位:style.configure('TLabelframe', background='#ffffff', bordercolor='black', labeloutside=False, labelmargins=(0,0,0,0))
内容的提问来源于stack exchange,提问作者Pisa Ponente
相关产品推荐
相关产品推荐

