Tkinter Python提取checkbox复选框值报错问题求助
报错原因与修复方案
错误根源
你遇到的"str" object has no attribute "get"报错,核心是var_list中存储的内容不符合预期:
- 代码中
var_list=list(a_dictionary.keys())生成的列表存储的是"vari0"、"vari1"这类字符串键,而非你创建的StringVar对象,字符串自然没有get()方法 - 同时你给
Checkbutton的variable参数传入字符串也不符合规范,该参数要求传入Tkinter内置的变量对象(如StringVar、BooleanVar)
修复方法
仅需调整1处核心逻辑即可:把var_list的生成逻辑从「取字典键」改为「取字典值」,同时移到循环外避免重复生成,其余代码不需要修改即可正常运行。
修改后的完整代码
for number in range(len(checklist_prt)): a_dictionary["vari{0}".format(number)] = StringVar() row_num.append(number) # 核心修改:移到循环外,取字典的值存储StringVar对象 var_list = list(a_dictionary.values()) for x in range(len(checklist_prt)): button_1_checklist_1=Checkbutton(checklist_part,text=checklist_prt[x],variable=var_list[x]) button_1_checklist_1.deselect() button_1_checklist_1.grid(row=row_num[x],column=0,sticky='w') def vlu(): for x in range(len(checklist_prt)): print(var_list[x].get()) values=Button(checklist_part,text="Vlu",command=vlu) values.grid(row=len(checklist_prt)+1,column=0,sticky='w')
可选优化
如果只是需要判断复选框是否选中,可将StringVar替换为BooleanVar,取值会直接返回True/False,更便于逻辑判断。
内容的提问来源于stack exchange,提问作者jthomasc
相关产品推荐
相关产品推荐

