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

Custom Tkinter动态生成未知数量复选框:如何获取实时选中状态存入列表

解决复选框状态无法实时更新到列表的问题

你的问题核心在于直接把复选框变量的初始值存入了列表,而非存储变量本身。后续复选框状态变更时,列表里的内容不会同步更新——因为你存的是固定字符串,不是能实时反映状态的变量引用。

修改方案

  1. 将每个tk.StringVar对象直接存入Check列表,而非调用get()后的初始值;
  2. 需要获取所有复选框当前状态时,遍历Check列表,对每个变量调用get()方法即可拿到最新状态。

修改后的代码

def Cmaker(defult,tab,filepath,com):
    tv.add(tab)
    global Check
    # 清空列表,避免多次调用函数时累积旧数据
    Check = []
    f=cc.open(filepath , "r", "utf-8")
    A=f.readlines()
    count=len(A)
    
    Xcounter=1
    Ycounter=0
    
    for i in range (count):
        temp=A[i]
        temp=temp.replace("\r\n","")
        check_size_A = tk.StringVar(value=defult)

        check_A=cs.CTkCheckBox(tv.tab(tab) , text=temp ,command=checkboxer, variable=check_size_A, onvalue="on" , offvalue="off")
        check_A.place(relx=(1-((120/1200)*Xcounter)) , rely=0.1+Ycounter)
        # 存入StringVar对象,而非初始值
        Check.append(check_size_A)
        if i>0 and i%10==9:
            Ycounter=Ycounter+0.1
            Xcounter=1
        else:
            Xcounter=Xcounter+1
    Bmaker (tab,"send",com,100,10,0.5,0.2+Ycounter)
    tv.set(tab)

获取当前所有复选框状态

用户提交表单时,用以下代码获取最新状态:

# 遍历列表,获取每个复选框的实时状态
current_check_states = [var.get() for var in Check]
# 可根据需求处理状态,比如打印、存入文件等
print(current_check_states)

额外提示

  • 每次调用Cmaker前清空Check列表,避免多次调用导致列表累积旧变量;
  • 尽量减少全局变量的使用,可考虑将Check作为函数返回值,或封装成类属性,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:03:12