Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter将复选框收集到列表中_Python_Tkinter - Fatal编程技术网

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(...)