Python tkinter将复选框收集到列表中
您好,我正在尝试收集在Python tkinter将复选框收集到列表中,python,tkinter,Python,Tkinter,您好,我正在尝试收集在我的列表中选中的框,现在我没有在输出中获得任何框(当我打印(我的列表))。也就是说,我想收集签入我的\u列表中的所有框,然后销毁根目录,首先,您几乎不应该以这种方式使用exec。它使代码难以阅读,并且与使用字典或列表相比没有任何实际好处 因此,要创建变量,可以执行以下操作: import tkinter as tk root=tk.Tk() root.configure(background="white") c_list = [] my_list = [] def get
我的列表中选中的框
,现在我没有在输出中获得任何框(当我打印(我的列表)
)。也就是说,我想收集签入我的\u列表中的所有框,然后销毁根目录
,首先,您几乎不应该以这种方式使用exec
。它使代码难以阅读,并且与使用字典或列表相比没有任何实际好处
因此,要创建变量,可以执行以下操作:
import tkinter as tk
root=tk.Tk()
root.configure(background="white")
c_list = []
my_list = []
def get_value():
for c in c_list:
my_list.append(c.get())
root.destroy()
MAIN_CATEGORIES = ['Arts & Crafts', 'Automotive', 'Baby', 'Beauty & Personal Care', 'Books',
'Computers', 'Digital Music', 'Electronics', 'Kindle Store', 'Prime Video', "Women's Fashion",]
for i in range(1,len(MAIN_CATEGORIES)):
exec(f'c{i}=tk.BooleanVar()')
c_list.append(f'c{i}')
for ind,i in enumerate(MAIN_CATEGORIES):
temp = tk.Checkbutton(root,text=i,variable=f'c{ind+1}',anchor="w",bg='grey',)
temp.grid(row=ind, column=2, sticky='W')
tk.Button(root,text='Get Category',command=lambda: get_value,bg="grey").grid(row=ind+1, column=3, sticky='W')
root.mainloop()
print(my_list)
然后,您可以在复选按钮中使用这些选项,如下所示:
vars = {}
for category in MAIN_CATEGORIES:
vars[category] = tk.BooleanVar()
对于get_values
,您只需迭代类别即可:
for row, category in enumerate(MAIN_CATEGORIES):
temp = tk.Checkbutton(..., variable=vars[category], ...)
temp.grid(row=row, column=2, sticky='W')
最后,您需要正确地调用按钮get\u value
。您不需要使用lambda:
def get_value():
for (category, var) in vars.items():
print(f"{category}={var.get()}")
my_list.append(var.get())
root.destroy()
tk.Button(..., command=get_value..).grid(...)