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

如何在PythonSimpleGUI中修改进度条最大值为CSV列表长度?

问题描述

我想要创建一个以列表长度为最大值的进度条。初始时将其最大值设为1000,但希望在读取CSV文件并获取列表长度后修改该最大值,不过未能达到预期效果。请问该如何实现?

当前代码

from read_csv import get_csv_list
file_input_col = [sg.Text('CSV file'),
                  sg.InputText(key='INPUT_FILE', enable_events=True, size=(45,1)),
                  sg.FileBrowse('browse', file_types=((('CSV file', '*.csv'),)))]

ok_button = [sg.OK()]
cancel_button = [sg.Cancel()]
progress_bar = [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')]

# window layout
layout = [  file_input_col,
            ok_button,
            cancel_button,
            progress_bar]

# Create window object
window = sg.Window('test', layout)
progress_bar = window['progressbar']


# loop
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event =='OK':
        keyword_list = get_csv_list(values['INPUT_FILE'])
        progress_bar.update(max=len(keyword_list))
        for i in range(1000): # I will change this for loop later
            progress_bar.UpdateBar(i+1)
            event, values = window.read(timeout=10)
            if event == 'Cancel'  or event == sg.WIN_CLOSED:
                progress_bar.UpdateBar(0)
                break
window.close()
解决方案

问题出在两处:一是修改进度条最大值后,循环仍用固定的range(1000),导致进度和实际列表长度不匹配;二是混用了PySimpleGUI的进度条更新方法(大小写不一致)。

修改后的代码如下:

from read_csv import get_csv_list
import PySimpleGUI as sg

file_input_col = [sg.Text('CSV file'),
                  sg.InputText(key='INPUT_FILE', enable_events=True, size=(45,1)),
                  sg.FileBrowse('browse', file_types=(('CSV file', '*.csv'),))]

ok_button = [sg.OK()]
cancel_button = [sg.Cancel()]
progress_bar = [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')]

layout = [file_input_col, ok_button, cancel_button, progress_bar]

window = sg.Window('test', layout)
progress_bar = window['progressbar']

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == 'OK':
        keyword_list = get_csv_list(values['INPUT_FILE'])
        list_length = len(keyword_list)
        # 更新进度条最大值并重置进度
        progress_bar.update(max=list_length, current_count=0)
        # 按实际列表长度循环
        for i in range(list_length):
            # 更新当前进度
            progress_bar.update(current_count=i+1)
            event, values = window.read(timeout=10)
            if event == 'Cancel' or event == sg.WIN_CLOSED:
                progress_bar.update(current_count=0)
                break
window.close()

关键修改说明

  • 用list_length存储读取到的列表长度,替换固定的1000作为循环范围
  • 使用progress_bar.update(max=list_length)正确设置最大值,同时current_count=0重置初始进度
  • 统一使用update(current_count=...)更新进度(PySimpleGUI新版推荐此写法,替代旧版UpdateBar)
  • 取消操作时同样用update(current_count=0)重置进度条

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:47