如何调整Tkinter中LabeledProgressbar样式以消除浮雕效果
解决Tkinter带标签进度条样式调整问题
当前使用Tkinter开发带标签的进度条(LabeledProgressbar)时,进度条呈现浮雕样式(如下左图),需要调整为扁平填充、文字居中的样式(如下右图):


修改后的代码
from tkinter import * import time from tkinter.ttk import Progressbar, Style def prog(): for i in range(0, 11): time.sleep(0.1) p1.step(100 / 10) txt = str(i) + '/' + str(10) s.configure("LabeledProgressbar1", text=txt) fn.update() for i in range(0, 16): time.sleep(0.1) p2.step(100 / 15) txt = str(i) + '/' + str(15) s.configure("LabeledProgressbar2", text=txt) fn.update() fn = Tk() fn.geometry("500x300+300+25") b1 = Button(fn, text='progression', width=50, command=prog) b1.place(x=75, y=150) # 复用单个Style对象,用不同样式名区分进度条 s = Style(fn) # 定义第一个进度条的布局与样式 s.layout("LabeledProgressbar1", [('LabeledProgressbar1.trough', {'children': [('LabeledProgressbar1.pbar', {'side': 'left', 'sticky': 'ns'}), ("LabeledProgressbar1.label", {"sticky": "nswe", "anchor": "center"})], 'sticky': 'nswe'})]) s.configure("LabeledProgressbar1", troughcolor="#e0e0e0", background="#2196F3", borderwidth=0, relief="flat", foreground="white") p1 = Progressbar(fn, orient="horizontal", length=300, style="LabeledProgressbar1") p1.place(x=100, y=10) # 定义第二个进度条的布局与样式 s.layout("LabeledProgressbar2", [('LabeledProgressbar2.trough', {'children': [('LabeledProgressbar2.pbar', {'side': 'left', 'sticky': 'ns'}), ("LabeledProgressbar2.label", {"sticky": "nswe", "anchor": "center"})], 'sticky': 'nswe'})]) s.configure("LabeledProgressbar2", troughcolor="#e0e0e0", background="#4CAF50", borderwidth=0, relief="flat", foreground="white") p2 = Progressbar(fn, orient="horizontal", length=300, style="LabeledProgressbar2") p2.place(x=100, y=90) fn.mainloop()
关键调整说明
- 避免样式覆盖:原代码创建两个Style对象会导致样式冲突,改用单个Style定义不同名称的样式(
LabeledProgressbar1和LabeledProgressbar2)。 - 移除浮雕效果:通过
borderwidth=0和relief="flat"取消进度条的立体边框,实现扁平化视觉。 - 自定义配色:设置
troughcolor(进度槽底色)、background(进度填充色)、foreground(文字颜色),匹配目标样式的色调。 - 文字居中显示:在布局配置中给标签添加
anchor="center"和sticky="nswe",确保文字始终位于进度条中央。 - 优化进度条填充:设置pbar的
sticky="ns",让进度条垂直填满槽的高度,视觉更饱满。
内容的提问来源于stack exchange,提问作者fardV
相关产品推荐
相关产品推荐

