Python 3.x Python:使用exec创建TKINTER Checkbutton时键入错误
我想使用循环(使用dropbox files\u list\u folder(“”).entries)创建一个复选框,如果选中,则获取文本和状态,但它显示TypeError,问题是我需要分配var以获取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
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很乐意帮忙。如果我的答案解决了您的问题,请务必选中“我的答案”旁边的复选按钮。这会让每个人都知道你的问题已经有了解决方案。