追加数据后,如何在同函数内生成新DataFrame并重新填充Treeview?
解决Treeview刷新后显示旧DataFrame的问题
你的问题根源很明确:追加行到谷歌表格后,没有重新拉取最新数据生成新的DataFrame,而是直接复用了之前的旧数据列表,所以Treeview显示的还是原来的内容。完全可以在追加行的同一函数里生成新的DataFrame,只要在清空Treeview后,重新从表格加载最新数据并处理即可。
修改后的代码示例
# 初始化SpreadsheetInfo实例(如果是首次执行) self.si = spi.SpreadsheetInfo() self.user = user # 追加行到谷歌表格 self.si.range3.append_row(self.new_date, table_range='A3:N3') # 清空Treeview self.session_tree.delete(*self.session_tree.get_children()) # 关键:重新拉取最新数据生成新的DataFrame和行列表 self.sess_m = self.si.sessions # 获取表格最新数据 self.sess_loc = self.sess_m.loc[self.sess_m['Provider'] == self.user] self.sess_rows = self.sess_loc.tail(100) self.session_rows = self.sess_rows.to_numpy().tolist() # 用最新数据填充Treeview for row in self.session_rows: # 注意原代码中self.sd.session_rows应为笔误,替换为当前最新的列表 self.session_tree.insert("","end",values=row)
核心修改说明
- 追加行后必须重新调用
self.si.sessions,因为原self.sess_m是追加前的旧DataFrame,无法自动同步表格更新 - 重复执行筛选、截取最新100行、转列表的流程,确保
self.session_rows是表格最新数据 - 填充Treeview时使用刚生成的新数据列表,而非之前的旧数据
内容的提问来源于stack exchange,提问作者Tjfire
相关产品推荐
相关产品推荐

