Tkinter Treeview基于Pandas DataFrame的筛选功能异常排查
问题排查与解决方案
核心原因
你的问题大概率是公司名称/行业筛选的逻辑分支中,没有在插入新数据前清空Treeview的旧行,而PEG Ratio筛选的分支里做了清空操作,导致前两种筛选时旧数据残留。
具体解决步骤
- 统一清空Treeview旧数据:在触发筛选逻辑的开头,不管哪种筛选条件,先执行Treeview的清空操作,确保旧数据被完全移除。
使用代码:# 删除Treeview中所有现有行 tabla.delete(*tabla.get_children()) - 修正筛选逻辑结构:将清空操作放在筛选条件判断之前,保证所有筛选场景都会先清空再插入新数据,避免分支遗漏。
示例修正后的筛选函数框架
def actualizar_tabla(): # 第一步:先清空Treeview旧数据 tabla.delete(*tabla.get_children()) # 获取筛选输入值 nombre_empresa = entry_nombre.get() peg_min = float(entry_peg_min.get()) if entry_peg_min.get() else None sector = entry_sector.get() # 基于筛选条件处理DataFrame df_filtrado = dfAcciones.copy() if nombre_empresa: df_filtrado = df_filtrado[df_filtrado['公司名称'].str.contains(nombre_empresa, case=False)] if peg_min is not None: df_filtrado = df_filtrado[df_filtrado['PEG Ratio'] >= peg_min] if sector: df_filtrado = df_filtrado[df_filtrado['行业名称'] == sector] # 插入筛选后的数据到Treeview for index, row in df_filtrado.iterrows(): tabla.insert('', 'end', values=(row['公司名称'], row['PEG Ratio'], row['行业名称']))
额外注意点
- 检查是否在某些筛选分支中重复调用了插入数据的逻辑,导致旧数据没被删除就叠加新数据。
- 确保
df_filtrado的处理逻辑正确,没有意外保留旧数据的情况。
内容的提问来源于stack exchange,提问作者Alejandro Ferrer
相关产品推荐
相关产品推荐

