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

点击复选框时如何避免score_home列表重复追加数据?

问题解决:Tkinter复选框触发函数时重复追加列表数据

问题分析

每次点击复选框触发func_previous_results时,你直接在已有Info_Match实例的score_home列表上调用append(),但未重置存储数据的结构。这导致每次查询数据库后,所有结果都会被再次追加到列表中,产生重复数据。而你尝试的try/except去重逻辑错误地删除了合法的重复元素(比如列表中的两个1),不符合需求。

解决方案

核心思路:每次触发函数时,完全重置数据存储结构,从数据库重新查询并构建单份正确结果,避免在历史数据基础上追加。

具体修改方案

方案1:完全重置存储字典(推荐)

在func_previous_results函数开头清空test字典,确保每次触发都从全新状态开始构建数据:

def func_previous_results():
    # 每次触发时重置字典,彻底清除历史数据
    global test
    test = {}
    
    # 执行sqlite3数据库查询逻辑
    # ...(省略你的数据库连接、查询代码)
    
    # 处理查询结果
    for row in previous_results_query.fetchall():
        match_id = row[0]
        if match_id not in test:
            info = Info_Match(
                tournament=row[1],
                date=row[2],
                rounds=row[3],
                clock=row[4],
                score_home=[]
            )
            test[match_id] = info
        # 追加当前行的主场分数(同一赛事可能有多条分数记录,需保留重复值)
        test[match_id].score_home.append(row[5])
    
    print(test)

方案2:仅清空分数列表(保留其他字段数据)

如果需要保留test字典中实例的其他字段数据,仅清空score_home列表:

def func_previous_results():
    global test
    # 清空所有已有实例的score_home列表
    for info in test.values():
        info.score_home.clear()
    
    # 执行sqlite3数据库查询逻辑
    # ...(省略你的数据库连接、查询代码)
    
    # 处理查询结果
    for row in previous_results_query.fetchall():
        match_id = row[0]
        if match_id not in test:
            info = Info_Match(
                tournament=row[1],
                date=row[2],
                rounds=row[3],
                clock=row[4],
                score_home=[]
            )
            test[match_id] = info
        test[match_id].score_home.append(row[5])

方案说明

  • 方案1通过重置整个字典,确保所有Info_Match实例都是基于本次查询的全新数据,彻底避免历史数据干扰。
  • 方案2保留实例的其他字段数据,仅清空分数列表后重新填充本次查询结果,同样保证score_home只包含单份正确数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:35:19