python-3.x - Python:使用 exec 创建 TKINTER Checkbutton 时键入错误
问题描述
我想使用循环创建一个复选框(使用 dropbox files_list_folder('').entries)并获取文本和状态,如果它被选中,但它显示 TypeError,问题是我需要分配 var 来获取状态检查按钮:
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
。对于那些不完全了解他们能做什么的人来说,这些是非常不安全的。两者都有严重的代码注入风险。
您可以使用列表来获取每个Checkbutton
选择的结果。我们可以将其存储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()
推荐阅读
- salesforce - 使用 Salesforce 创建动态自定义字段
- amazon-web-services - 使用 route53 的 FQDN
- ruby - 为什么 `reduce` 不评估单元素数组的块?
- oauth - Azure DataFactory V2 - 带有 OAuth 令牌的 Salesforce Linkedservice
- java - 输入:- I Love India 输出:- I1 Love4 India5
- regex - 如何在正则表达式中编写 If 条件?
- database - 当我尝试连接到 Oracle TNS 时发现此错误:协议适配器错误
- python - 为状态更改的每条记录发送单独的邮件
- javascript - 使用 Javascript 从 Destop 应用程序导出到 Excel
- python-3.x - 如何使用 Python 从 IP 摄像机流中找到以 mm 为单位的圆形对象直径?