Tkinter Treeview更新记录时内容显示错位问题求助
Tkinter Treeview更新数据错位问题解决
问题根源
更新记录时,update_record函数中传入values的字段顺序和初始化插入Treeview时的顺序完全不匹配,直接导致数据错位显示到错误表头下。
对比插入与更新的字段顺序:
- 初始化插入时的
values顺序(对应Treeview存储的字段索引):(record[0], record[3], record[1], record[9], record[10], record[11], supervisor_value, create_value, void_value, active_value, reconcile_value, drawer_value) # 索引对应:0:User,1:Full Name,2:Location,3:Drawer1,4:Drawer2,5:Drawer3,6:Supervisor,7:create_value,8:void_value,9:active_value,10:reconcile_value,11:drawer_value - 原更新代码的
values顺序完全混乱,和上述映射无对应关系,必然导致错位。
修正后的update_record函数
严格按照插入时的字段顺序组织更新参数,同时修正原代码中缩进错误的清空逻辑:
def update_record(): # 获取选中的记录 selected = my_tree.focus() # 按插入时的字段顺序更新Treeview my_tree.item(selected, text="", values=( casr_entry.get(), # 对应索引0:User fn_entry.get(), # 对应索引1:Full Name loc_entry.get(), # 对应索引2:Location draw1_entry.get(), # 对应索引3:Drawer 1 draw2_entry.get(), # 对应索引4:Drawer 2 draw3_entry.get(), # 对应索引5:Drawer 3 superv_check.get(),# 对应索引6:Supervisor create_check.get(),# 对应索引7:create_value void_check.get(), # 对应索引8:void_value active_check.get(),# 对应索引9:active_value recon_check.get(), # 对应索引10:reconcile_value drwer_check.get() # 对应索引11:drawer_value )) # 清空输入框(修正缩进,移入函数内部) loc_entry.delete(0, END) active_check.delete(0, END) casr_entry.delete(0, END) fn_entry.delete(0, END) create_check.delete(0, END) superv_check.delete(0, END) void_check.delete(0, END) recon_check.delete(0, END) drwer_check.delete(0, END) draw1_entry.delete(0, END) draw2_entry.delete(0, END) draw3_entry.delete(0, END)
额外注意事项
- 原代码中清空输入框的代码缩进错误,属于函数外部逻辑,会导致未点击更新就执行清空,现已修正到函数内部。
- 若后续需要重新查询数据库刷新Treeview,需先调用
my_tree.delete(*my_tree.get_children())清空现有数据,再重新插入,避免重复。
内容的提问来源于stack exchange,提问作者marcspector1972
相关产品推荐
相关产品推荐

