如何在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
相关产品推荐
相关产品推荐

