如何让PySimpleGUI进度条适配真实文件处理数量正常显示?
问题分析与解决
核心错误点
- 进度条更新逻辑混乱:每次处理完单个文件后,循环多次调用进度条,导致进度条瞬间跳变,出现闪烁。
- 总数值取值错误:用输出文件夹的文件总数作为进度条总数值,而非输入文件夹中待处理的TXT文件总数,导致进度基准不准确。
- 调用时机错误:每处理完一个文件就重复遍历进度,而非每处理一个文件仅更新一次进度。
修正步骤
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
相关产品推荐
相关产品推荐

