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

如何使用从Excel提取值的列表更新PySimpleGUI Listbox控件内容

问题原因及修复代码

根因分析

  • 最直接的卡死原因是缩进错误:i += 1 写在了while i < 789 循环的外部,进入循环后i的值永远为0,循环条件永远成立,程序进入无限死循环无法响应界面事件。
  • 变量命名不规范:使用Python内置关键字list作为自定义列表变量名,会覆盖内置list类型,后续集成到大型项目时极易触发隐性错误。
  • 边界风险:如果Excel的Active Diagrams工作表行数不足789,直接通过下标i取值会触发索引越界报错。

修复后代码

import pandas as pd
import PySimpleGUI as psg

workbook = pd.read_excel('Connection Diagrams.xlsx', 'Active Diagrams')
# 替换list关键字,改用自定义变量名
diagram_list = []

layout = [[psg.Listbox(values=diagram_list, size=(20,20), key='l')],
        [psg.Button('Get')]]
win = psg.Window('', layout)

while True:
    event, values = win.read()
    if event == psg.WIN_CLOSED:
        break
    if event == 'Get':
        # 改用pandas内置筛选,效率更高且不会出现下标越界问题
        sp_rows = workbook[workbook['Type:'] == 'SP']
        diagram_list = sp_rows['Connection Diagram:'].tolist()
        win['l'].update(values=diagram_list)

win.close()

优化说明

直接用pandas布尔索引筛选符合条件的行,无需手动写循环计数,避免了下标错误、缩进错误等问题,执行效率远高于手动循环遍历,更适合后续集成到大型项目中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:04