在for循环中生成复选框并在lis中存储响应

2024-05-20 19:54:00 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试在for循环中生成复选框(使用tkinter)时遇到问题&;将响应存储为列表中的0s&1s/true&false

我目前有:

from tkinter import *
def createCheckButtons():
    dict_keys = ('a', 'b', 'c') # ...)
    numFields = len(dict_keys)

    master = Tk()
    cbVariables = {}
    cb = {}

    Label(master, text="Fields to Return").grid(row=0, sticky=W)
    for x in range(numFields):
    cbVariables[x] = IntVar()
    cb[x] = Checkbutton(master, text=dict_keys[x], \
        variable=cbVariables[x]).grid(row=(x+1)%13,column=x//13,sticky=W)
    cbResponses = { }
    Button(master, text='Finished Selecting',command=vars_store(cbVariables,cb,numFields,\  
        cbResponses)).grid(row=(x+2),sticky=W, pady=4)

    mainloop() #master.mainloop()
    master.update()

def vars_store(cbVariables,cab,numFields, cbResponses)
    for x in range(numFields):
        cbResponses[x] = cb[x].get()

createCheckButtons()

然后,我想通过如下操作将dict_keys简化为使用复选按钮选择的键:

reducedDict_Keys = { } 
For x in range(len(cbResponses)):
    if cbResponses[x]:
        reducedDict_Keys.append(dict_keys[x])

如果有更好的办法,请告诉我


Tags: textinmasterfortkinterrangekeysdict
1条回答
网友
1楼 · 发布于 2024-05-20 19:54:00

你不需要定义太多的dict来实现你想要的-一个简单的list就可以了。只需在for循环期间将IntVar附加到列表中。您还可以使用enumerate向iterable添加一个计数器,在您的例子中是dict_keys

from tkinter import *

root = Tk()
var_store = []
dict_keys = "abcdefgh" #string is an iterable too so you don't have to use a tuple of ("a","b","c"...)

def createCheckButtons(master):
    Label(master, text="Fields to Return").grid(row=0, sticky=W)
    for num, x in enumerate(dict_keys):
        v = IntVar()
        Checkbutton(master, text=x, variable=v).grid(row=(num+1)%13,column=num//13,sticky=W)
        var_store.append(v)
    Button(master, text='Finished Selecting',command=vars_store).grid(sticky=W, pady=4)

def vars_store():
    result = [dict_keys[num] for num, i in enumerate(var_store) if i.get()]
    print (result)

createCheckButtons(root)

root.mainloop()

相关问题 更多 >