【问题标题】:Create multiple checkboxes from a list and get all values从列表中创建多个复选框并获取所有值
【发布时间】:2018-10-07 11:34:29
【问题描述】:

我想从一个大列表中生成多个复选框,并获取所有值。

这是我目前的代码(列表可能要大得多):

from Tkinter import *

def print_ingredients(*args):
   values = [('cheese',cheese.get()),('ham',ham.get()),('pickle',pickle.get()),('mustard',mustard.get()),('lettuce',lettuce.get())]
   print values

lst = ['cheese','ham','pickle','mustard','lettuce']

top = Tk()

mb=  Menubutton ( top, text="Ingredients", relief=RAISED )
mb.grid()
mb.menu  =  Menu ( mb, tearoff = 0 )
mb["menu"]  =  mb.menu

cheese=IntVar()
ham=IntVar()
pickle=IntVar()
mustard=IntVar()
lettuce=IntVar()

l = mb.menu.add_checkbutton(label="cheese", variable = cheese)
l = mb.menu.add_checkbutton(label="ham", variable = ham)
l = mb.menu.add_checkbutton(label="pickle", variable = pickle)
l = mb.menu.add_checkbutton(label="mustard", variable = mustard)
l = mb.menu.add_checkbutton(label="lettuce", variable = lettuce)

btn = Button(top, text="Print", command=print_ingredients)
btn.pack()

mb.pack()

top.mainloop()

这可以按预期工作,但是当它是一个更大的列表时,似乎没有必要把所有这些都写出来。

有没有办法仅通过遍历字符串列表来创建复选框/检查按钮(然后获取它们的值)?

【问题讨论】:

    标签: python checkbox tkinter


    【解决方案1】:

    是的。您需要将数据存储在某处。我建议制作一本字典。

    from Tkinter import *
    
    INGREDIENTS = ['cheese','ham','pickle','mustard','lettuce']
    
    def print_ingredients(*args):
       values = [(ingredient, var.get()) for ingredient, var in data.items()]
       print values
    
    data = {} # dictionary to store all the IntVars
    
    top = Tk()
    
    mb=  Menubutton ( top, text="Ingredients", relief=RAISED )
    mb.menu  =  Menu ( mb, tearoff = 0 )
    mb["menu"]  =  mb.menu
    
    for ingredient in INGREDIENTS:
        var = IntVar()
        mb.menu.add_checkbutton(label=ingredient, variable=var)
        data[ingredient] = var # add IntVar to the dictionary
    
    btn = Button(top, text="Print", command=print_ingredients)
    btn.pack()
    
    mb.pack()
    
    top.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2017-03-09
      • 2016-11-06
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多