TreeView筛选后仅展示ID且触发IndexError索引越界如何修复
修复方案
问题根源
筛选处理函数filtracampionati的查询结果处理逻辑存在错误:
- 代码
result=[row[0] for row in cursor]仅提取了每行查询结果的第一个字段(即你看到的ID字段),剩余所有关联字段全部被丢弃 - 插入TreeView时仅传入1个字段值,所以界面仅显示ID;同时后续点击事件的
getData函数尝试访问索引1~9的字段时,自然会触发IndexError: list index out of range错误
代码修改
仅需要调整filtracampionati函数的查询结果处理逻辑,和全量展示函数displayAll的逻辑保持一致即可,修改后的完整代码如下:
def filtracampionati(): tv.delete(*tv.get_children()) campionati = combo_Campionato.get() giornate = combo_Giornate.get() cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=? AND giornata=?',(campionati, giornate,)) # 原错误代码:仅取第一个字段 result=[row[0] for row in cursor] # 修改后:取完整行数据,也可以直接写 result = cursor.fetchall() 效果完全一致 result = [row for row in cursor] for row in result: tv.insert("", END, values=row)
验证说明
修改后两个问题会同时解决:
- 筛选后TreeView会展示所有关联字段,和全量展示时的表现完全一致
- 点击TreeView条目时,
getData函数可以正常读取到所有索引对应的字段,不会再报索引越界错误
内容的提问来源于stack exchange,提问作者William50694
相关产品推荐
相关产品推荐

