从tkinter Python2.7中的复选框列表动态创建复选框

2024-09-28 01:32:43 发布

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

我正在尝试从一个复选框列表创建新的复选框,但在一个新的框架。但是,当同时创建时,新创建的复选框就像单选按钮一样。这里是代码(仅用于创建框的函数)

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

Tags: toinforgetisvarvalsale
2条回答

您给了它们相同的variable属性的值,它们每个都需要有自己的StringVar实例。您需要将val的创建移动到循环中,以便每个checkbutton都得到一个唯一的StringVar。在

还有一个问题是,在创建新变量之后,没有将其设置为值。创建checkbutton时,需要确保关联变量设置为on值或off值。在

上面的代码有两个问题。首先,变量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

相关问题 更多 >

    热门问题