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