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

如何在Tkinter的两个不同Progressbar中分别显示自定义文本

实现多个ttk进度条显示不同文本的两种方案

方案1:自定义独立样式(匹配你的预期思路)

你的猜想是可行的,ttk样式支持创建多个互不干扰的自定义派生样式,你可以为每个进度条单独定义专属样式,各自的文本属性独立配置,修改后不会互相影响。
示例修改代码如下:

import tkinter
from tkinter import ttk

style = ttk.Style(root)
# 先定义通用的带文本进度条布局
base_layout = [('Horizontal.Progressbar.trough',
            {'children': [('Horizontal.Progressbar.pbar',
                            {'side': 'left', 'sticky': 'ns'})],
                'sticky': 'nswe'}), 
            ('Horizontal.Progressbar.label', {'sticky': ''})]

# 为两个进度条分别创建独立样式
style.layout('text1.Horizontal.TProgressbar', base_layout)
style.configure('text1.Horizontal.TProgressbar', text='0/1524')
style.layout('text2.Horizontal.TProgressbar', base_layout)
style.configure('text2.Horizontal.TProgressbar', text='0/10000')

# 第一个进度条使用样式1
ProgressBarOfDirectory = ttk.Progressbar(ProgressbarFrame,
                                                 style='text1.Horizontal.TProgressbar',
                                                 orient="horizontal",
                                                 length=WidthOfElements,
                                                 mode="determinate",
                                                 maximum=1524,
                                                 variable=PourcentageOfDirectoryAnalysisDone)
ProgressBarOfDirectory.pack(side="top")

# 第二个进度条使用样式2
ProgressBarOfAll = ttk.Progressbar(ProgressbarFrame,
                                           style='text2.Horizontal.TProgressbar',
                                           orient="horizontal",
                                           length=WidthOfElements,
                                           mode="determinate",
                                           maximum=10000,
                                           variable=PourcentageOfAllAnalysisDone)
ProgressBarOfAll.pack(side="top")

# 后续更新文本时,分别修改对应样式的text属性即可
# 更新第一个进度条文本:style.configure('text1.Horizontal.TProgressbar', text=f'{current1}/1524')
# 更新第二个进度条文本:style.configure('text2.Horizontal.TProgressbar', text=f'{current2}/10000')

方案2:叠加Label控件(更灵活,更易维护)

如果进度条数量不固定或者后续修改需求多,推荐直接在进度条上方叠加透明背景的Label控件,完全脱离样式限制,更新文本时直接操作Label的text属性即可,逻辑更直观。
示例代码如下:

# 第一个进度条+文本标签组合
ProgressBarOfDirectory = ttk.Progressbar(ProgressbarFrame,
                                                 orient="horizontal",
                                                 length=WidthOfElements,
                                                 mode="determinate",
                                                 maximum=1524,
                                                 variable=PourcentageOfDirectoryAnalysisDone)
ProgressBarOfDirectory.pack(side="top")
# 叠加文本标签,place居中定位
label1 = ttk.Label(ProgressBarOfDirectory, text='0/1524', background='systemTransparent')
label1.place(relx=0.5, rely=0.5, anchor='center')

# 第二个进度条+文本标签组合
ProgressBarOfAll = ttk.Progressbar(ProgressbarFrame,
                                           orient="horizontal",
                                           length=WidthOfElements,
                                           mode="determinate",
                                           maximum=10000,
                                           variable=PourcentageOfAllAnalysisDone)
ProgressBarOfAll.pack(side="top")
label2 = ttk.Label(ProgressBarOfAll, text='0/10000', background='systemTransparent')
label2.place(relx=0.5, rely=0.5, anchor='center')

# 后续更新文本直接修改对应label的text即可
# label1.config(text=f'{current1}/1524')
# label2.config(text=f'{current2}/10000')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:03