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

PySimpleGUI如何调用用户选择的Excel文件及实现output_num除8判断

PySimpleGUI多步骤BIN生成工具问题修复

问题根因与修复方法

1. 无法获取选中文件、加载数据失败

核心错误点:

  • FileBrowse选中的文件路径会存在values['-IN1-']中,当前代码硬编码写死打开"Use user chosen CSV"字符串,根本没有读取控件返回的路径
  • 文件读取、BIN生成逻辑写在事件循环外、窗口关闭后才执行,且提前定义的16个binFile全局变量从未被赋值,调用write()/close()会直接触发空对象报错
  • FileBrowse控件仅配置了xlsx格式过滤,和提示文字里支持CSV的描述不符
  • BIN文件关闭逻辑写在CSV行遍历循环内部,处理第一行数据后就会关闭文件句柄,后续写入直接报错
  • 上一步/下一步按钮的key序号和布局索引不匹配,点击会出现跳步、索引越界问题

修复操作:

  • 修改FileBrowse的文件类型配置:
sg.FileBrowse(file_types=(("Supported Files", "*.csv *.xlsx"), ("CSV File", "*.csv"), ("Excel File", "*.xlsx")))
  • 不要硬编码16个独立的binFile全局变量,用列表存储文件句柄,避免重复代码
  • 将BIN生成逻辑移动到事件循环内部,当用户点击最后一步确认(Layout3的Next按钮)时,再从values字典读取所有输入参数执行生成:
    • 源文件路径取values['-IN1-']
    • 导出目录路径取values['-IN2-']
  • 所有CSV行遍历完成后,再统一关闭所有打开的BIN文件句柄
  • 修正所有Prev/Next按钮的key,和所属布局的索引保持一致,比如第i个布局的Prev按钮key为Prev {i},Next按钮key为Next {i},避免跳步错误

2. 动态计算BIN文件生成数量

核心逻辑:1个BIN文件对应8个驱动位,驱动位数量除以8后向上取整就是需要生成的BIN文件数(不满8位也需要占用1个文件),比如9位驱动需要2个BIN文件,71位驱动需要9个BIN文件。

实现步骤:

  • 当用户在Layout0点击Next时,先校验values['-IN0-']输入是否为1-71之间的合法整数,不合法则弹出错误提示,不允许跳转到下一步
  • 校验通过后将输入值存为全局变量driver_bit_num,用整数运算计算需要的BIN文件数,无需引入额外库:
bin_file_count = (driver_bit_num + 7) // 8
  • 调用open_output_files()时传入计算得到的bin_file_count,同时拼接用户选择的导出目录,不要将文件存在脚本当前工作目录
  • 逐行处理CSV数据时,按bin_file_count循环截取对应位段、转字节写入对应BIN文件,替换掉原来硬编码byte1~byte16的冗余写法

其他注意事项

  • Python内置的csv模块仅支持读取csv格式文件,如果需要支持xlsx格式,需要额外安装pandas和openpyxl库读取Excel内容,否则选中xlsx文件会触发解析错误
  • 当前open_output_files()函数返回的文件句柄列表没有赋值给变量,后续无法调用写入方法,需要用变量接收返回的列表
  • 处理位串时记得补0对齐,避免位长度不足时切片报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:57:25