Python 3.x Python:使用exec创建TKINTER Checkbutton时键入错误

Python 3.x Python:使用exec创建TKINTER Checkbutton时键入错误,python-3.x,tkinter,Python 3.x,Tkinter,我想使用循环(使用dropbox files\u list\u folder(“”).entries)创建一个复选框,如果选中,则获取文本和状态,但它显示TypeError,问题是我需要分配var以获取checkbutton的状态: for ii,j in zip(range(len(files_list)),range(1,len(files_list)+1)): exec("var%i=StringVar()"%j) exec("ch%i = Checkbutton(text

我想使用循环(使用dropbox files\u list\u folder(“”).entries)创建一个复选框,如果选中,则获取文本和状态,但它显示TypeError,问题是我需要分配var以获取checkbutton的状态:

for ii,j in zip(range(len(files_list)),range(1,len(files_list)+1)):
    exec("var%i=StringVar()"%j)
    exec("ch%i = Checkbutton(text=files_list[ii],variable=var%i)"%j%j)
    exec("ch%i.grid(row=ii, column=0, sticky=W)"%j)

尽可能避免使用
exec
eval
。对于不完全了解自己能做什么的人来说,这些是非常不安全的。两者都有代码注入的严重风险

您可以使用列表获取每个
选中按钮的结果。我们可以在列表中存储
StringVar()
,然后在选中或取消选中按钮时调用该值

import tkinter as tk


root = tk.Tk()

value_list = ['One', 'Two', 'Three', 'Four']
var_list = []

def print_results_from_selection(i):
    print("{}: {}".format(value_list[i], var_list[i].get()))

def generate_buttons():
    for i in range(len(value_list)):
        var_list.append(tk.StringVar())
        var_list[-1].set(0)
        tk.Checkbutton(root, text=value_list[i], variable=var_list[-1],
                       command=lambda i=i: print_results_from_selection(i),
                       onvalue=1, offvalue=0).grid(row=i, column=0, sticky="w")

generate_buttons()
root.mainloop()

你看到的TypeError是什么?TypeError:没有足够的参数来设置StringFormat。你不应该像这样使用exec,这会使你的代码几乎无法读取和调试。将小部件存储在字典或列表中。看,是的,我理解,但无论何时选中它,我都需要它的文本,也就是说,我需要一个var=StringVar()作为我创建的每个选中按钮。我想这是因为您在格式字符串中使用了百分比字符
%
。我相信你需要用
%%
来代替。@balabharath很乐意帮忙。如果我的答案解决了您的问题,请务必选中“我的答案”旁边的复选按钮。这会让每个人都知道你的问题已经有了解决方案。