如何使用从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
相关产品推荐
相关产品推荐

