Создание флажков в цикле for и сохранение ответов в списке - PullRequest
0 голосов
/ 15 февраля 2019

У меня проблемы с попыткой сгенерировать флажки (используя tkinter) в цикле for и сохранить ответы как 0s&1 s / 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])

Если есть лучший способ сделатьвсе это, пожалуйста, дайте мне знать!

1 Ответ

0 голосов
/ 15 февраля 2019

Вам не нужно определять столько dict, чтобы достичь того, что вы хотите - один простой list будет работать нормально.Просто добавьте ваш IntVar в список во время цикла for.Вы также можете использовать enumerate, чтобы добавить счетчик к итерируемому, что в вашем случае 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...