Custom Tkinter动态生成未知数量复选框:如何获取实时选中状态存入列表
解决复选框状态无法实时更新到列表的问题
你的问题核心在于直接把复选框变量的初始值存入了列表,而非存储变量本身。后续复选框状态变更时,列表里的内容不会同步更新——因为你存的是固定字符串,不是能实时反映状态的变量引用。
修改方案
- 将每个
tk.StringVar对象直接存入Check列表,而非调用get()后的初始值; - 需要获取所有复选框当前状态时,遍历
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
相关产品推荐
相关产品推荐

