MacOSX下Tkinter的ttk进度条背景修改及灰色边框去除
解决MacOS下ttk进度条灰色边框问题
嘿,我之前在MacOS上开发Tkinter程序时也踩过这个ttk进度条边框的坑!你用highlightbackground没效果太正常了——因为ttk组件的外观不是靠普通Tkinter的那些属性控制的,而是由ttk样式系统和Mac默认的aqua主题决定的,那个讨厌的灰色边框是主题自带的默认样式。
给你两个亲测有效的解决方法,在MacOS上完全管用:
方法一:自定义ttk进度条样式
直接创建一个自定义样式,覆盖默认的进度条边框设置:
from Tkinter import * import ttk # 创建窗口 window1 = Tk() window1.title("Cookie Clicker") # 初始化ttk样式对象 style = ttk.Style() # 针对Mac的aqua主题定制进度条样式 style.configure("Custom.TProgressbar", borderwidth=0, # 将边框宽度设为0,直接去掉边框 relief="flat", # 边框样式设为扁平,彻底消除凸起感 troughcolor="#f0f0f0", # 进度条背景色,可选,和窗口背景匹配更和谐 background="#ffcc66") # 进度条填充色,可选,替换成你想要的颜色 # 使用自定义样式创建进度条 progress_bar = ttk.Progressbar(window1, style="Custom.TProgressbar", orient="horizontal", length=250, mode="determinate") progress_bar.pack(padx=20, pady=20) # 测试进度条动起来(可选) progress_bar.start(15) window1.mainloop()
方法二:直接修改默认主题的进度条规则
如果你不想额外指定自定义样式名,也可以直接修改aqua主题下默认TProgressbar的边框属性:
from Tkinter import * import ttk window1 = Tk() window1.title("Cookie Clicker") style = ttk.Style() # 针对所有状态下的进度条,去掉边框 style.map("TProgressbar", troughrelief=[('disabled', 'flat'), ('pressed', 'flat'), ('active', 'flat')], borderwidth=[('disabled', 0), ('pressed', 0), ('active', 0)]) # 直接用默认样式创建进度条即可 progress_bar = ttk.Progressbar(window1, orient="horizontal", length=250, mode="determinate") progress_bar.pack(padx=20, pady=20) progress_bar.start(15) window1.mainloop()
为啥原来的highlightbackground没用?
普通Tkinter组件(比如Canvas、Button)的highlightbackground是用来控制焦点高亮边框的,但ttk组件的渲染逻辑完全不同——它依赖主题定义的样式规则,普通的Tkinter属性对它根本不起作用,必须通过ttk.Style来修改外观。
内容的提问来源于stack exchange,提问作者user8966196
相关产品推荐
相关产品推荐

