从tkinter python 2.7中的复选框列表中动态创建复选框

时间:2015-07-06 10:53:52

标签: python checkbox tkinter

我正在尝试从复选框列表中创建新的复选框,但是在新框架中。然而,新创建的复选框在同时创建时就像无线电按钮一样。这是代码(仅用于创建框的功能)

def printcheckbuttons():
    val=StringVar()#checkboxlist is a list of checkbox widgets
    for x in range (len(checkboxlist)):
        for ki in checkboxlist:
            if ki.var.get() != 'null':
                sale=Checkbutton(frameright,text=ki.var.get()[0:],variable=val,onvalue=ki.var.get(),offvalue='null')
                sale.val=val
                saletracker.append(sale)#saletracker is a list to track selected checkboxes in checkboxlist ant post them to a second frame
                sale.pack(anchor=NW)           
                checkboxlist.remove(ki)
                ki.destroy()
                print 'checkboxlist 1',checkboxlist
   destroyboxes(checkboxlist)#destroys and removes all checkboxes in checkbuttonlist
   print 'checkboxlist',checkboxlist
   print "saletracker ", saletracker

2 个答案:

答案 0 :(得分:0)

您为variable属性赋予它们所有相同的值 - 每个属性都需要各自拥有StringVar的实例。您需要在循环中移动val的创建,以便每个检查按钮都获得唯一的StringVar

您还遇到的问题是,在创建新变量后,您没有将其设置为值。创建检查按钮时,需要确保关联变量设置为on值或off值。

答案 1 :(得分:0)

上面的代码有两个问题。首先,变量val的创建应该是为每个创建的复选框创建的,并且无法将框初始化为其中一个值。经过这两次修正后,代码运行良好。

def printcheckbuttons():
    for x in range (len(checkboxlist)):

        for ki in checkboxlist:
        #val=StringVar()
            if ki.var.get() != 'null':
                val=StringVar()
                sale=Checkbutton(frameright,text=ki.var.get()[0:],variable=val,onvalue=ki.var.get(),offvalue='null')
                sale.val=val
                saletracker.append(sale)
                sale.pack(anchor=NW)
                sale.deselect()           
                checkboxlist.remove(ki)
                ki.destroy()
                print 'checkboxlist 1',checkboxlist
   destroyboxes(checkboxlist)
   print 'checkboxlist',checkboxlist
   print "saletracker ", saletracker