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

如何让PySimpleGUI进度条适配真实文件处理数量正常显示?

问题分析与解决

核心错误点

  1. 进度条更新逻辑混乱:每次处理完单个文件后,循环多次调用进度条,导致进度条瞬间跳变,出现闪烁。
  2. 总数值取值错误:用输出文件夹的文件总数作为进度条总数值,而非输入文件夹中待处理的TXT文件总数,导致进度基准不准确。
  3. 调用时机错误:每处理完一个文件就重复遍历进度,而非每处理一个文件仅更新一次进度。

修正步骤

1. 提前统计待处理文件总数

在convert_to_csv函数开头,先获取输入文件夹中所有要处理的TXT文件,统计总数作为进度条的总基准值:

def convert_to_csv(input_folder, output_folder, dataframe2, dataframe3):
    start = time.time()
    # 先获取所有待处理的TXT文件并统计总数
    txt_files = [f for f in os.listdir(input_folder) if f.endswith(".txt")]
    total_files = len(txt_files)
    if total_files == 0:
        sg.popup_no_titlebar("No TXT files found in input folder!")
        return
    # 后续读取映射文件等原代码保持不变...

2. 遍历文件时逐次更新进度条

将原有的文件遍历改为带索引的循环,每处理完一个文件就调用一次进度条更新:

# 替换原有的 for files in os.listdir(input_folder): 循环
for idx, file in enumerate(txt_files, start=1):
    df1 = pd.read_csv(rf"{input_folder}/{file}", sep="\t", encoding="latin-1")
    # 以下列映射、文件名生成、保存CSV等原文件处理代码保持不变...
    
    # 处理完当前文件后,更新一次进度条
    sg.one_line_progress_meter(
        "Loading...",
        idx,  # 当前已处理的文件数
        total_files,  # 总待处理文件数
        "key",
        "Files Processed",
        orientation="horizontal"
    )

3. 删除错误的进度条循环代码

删除原文件处理完后那段循环调用进度条的冗余代码:

# 删掉这段错误代码
# total_files = sum([len(files) for r, d, files in os.walk(output_folder)])
# for i in range(1, total_files):
#     sg.one_line_progress_meter(
#         "Loading...",
#         i + 1,
#         1000,
#         "key",
#         "Files Processed",
#         orientation="horizontal",
#     )

修正后逻辑说明

  • 提前统计待处理的TXT文件总数,确保进度条的总基准值准确。
  • 每处理完一个文件仅调用一次进度条更新,让进度条逐步平稳推进,避免瞬间跳变的闪烁问题。
  • 进度条当前值完全匹配实际已处理的文件数,真实反映处理进度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:00:59