You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter Treeview追加数据到JSON仅保留最后一条如何解决

你遇到的问题本质是写入逻辑错误:每次新增时仅将当前新增的单条数据写入JSON,未读取已存储的历史数据,新内容直接覆盖了整个文件,导致只能保留最新一条记录。

解决方案

核心实现逻辑

每次写入时遵循「读全量现有数据→更新数据→全量写回文件」的流程,不要直接写入单条数据,也不要用文件追加模式操作JSON文件(会破坏JSON结构导致无法解析)。

分步实现代码

首先定义公共配置和加载函数,在程序启动时调用将历史数据加载到Treeview中:

import json
import os

# 配置文件存储路径,可自行修改
WEAPON_CONFIG_PATH = "weapon_rec_config.json"

def load_local_config(treeview_obj):
    """加载本地JSON配置到Treeview组件"""
    # 清空Treeview现有内容避免重复
    for item in treeview_obj.get_children():
        treeview_obj.delete(item)
    # 配置文件不存在则初始化空配置
    if not os.path.exists(WEAPON_CONFIG_PATH):
        with open(WEAPON_CONFIG_PATH, "w", encoding="utf-8") as f:
            json.dump([], f, ensure_ascii=False, indent=2)
        return
    # 读取历史配置加载到界面
    with open(WEAPON_CONFIG_PATH, "r", encoding="utf-8") as f:
        try:
            config_list = json.load(f)
        except json.JSONDecodeError:
            # 配置文件损坏时重置为空
            config_list = []
    for config in config_list:
        treeview_obj.insert("", "end", values=(
            config["Game"],
            config["Weapon"],
            config["Down"],
            config["Up"],
            config["Left"],
            config["Right"]
        ))

然后修改你的addWeapon新增函数:

def addWeapon(treeview_obj, game, weapon, down, up, left, right):
    # 第一步:将新增数据插入Treeview
    treeview_obj.insert("", "end", values=(game, weapon, down, up, left, right))
    # 第二步:读取Treeview所有当前已有的全量配置
    all_config = []
    for item in treeview_obj.get_children():
        row = treeview_obj.item(item, "values")
        all_config.append({
            "Game": row[0],
            "Weapon": row[1],
            "Down": row[2],
            "Up": row[3],
            "Left": row[4],
            "Right": row[5]
        })
    # 第三步:全量写入JSON文件覆盖旧内容,此时保存的就是所有最新数据
    with open(WEAPON_CONFIG_PATH, "w", encoding="utf-8") as f:
        json.dump(all_config, f, ensure_ascii=False, indent=2)

额外说明

  • 程序初始化时调用一次load_local_config(你的Treeview实例对象),即可将之前保存的所有配置加载到界面
  • 如果后续需要支持配置的修改、删除功能,直接复用上面的全量写入逻辑即可:每次修改Treeview内容后,将Treeview所有数据统一写回JSON,不需要单独处理增删改的不同写入逻辑,还能保证界面和本地存储完全一致

内容的提问来源于stack exchange,提问作者RuthIsRoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:30:01