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

如何调整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()

关键调整说明

  1. 避免样式覆盖:原代码创建两个Style对象会导致样式冲突,改用单个Style定义不同名称的样式(LabeledProgressbar1和LabeledProgressbar2)。
  2. 移除浮雕效果:通过borderwidth=0和relief="flat"取消进度条的立体边框,实现扁平化视觉。
  3. 自定义配色:设置troughcolor(进度槽底色)、background(进度填充色)、foreground(文字颜色),匹配目标样式的色调。
  4. 文字居中显示:在布局配置中给标签添加anchor="center"和sticky="nswe",确保文字始终位于进度条中央。
  5. 优化进度条填充:设置pbar的sticky="ns",让进度条垂直填满槽的高度,视觉更饱满。

内容的提问来源于stack exchange,提问作者fardV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:47:43