我正在尝试创建一个Tkinter GUI,其中有用于项目的复选框,但是我只有一个(最后一个)。
我在做什么错了?
class Items(Daily):
def __init__(self):
super().__init__()
self.appD=Frame(self.root, padx=20, pady=20)
self.appD.grid(row=0, column=0)
self.itemsAl()
def itemsAl(self):
items=['item1', 'item2', 'item3']
variable=IntVar()
check_boxes={item: IntVar() for item in items}
label_Lbl=Label(self.appD, text='label', )
label_Lbl.grid(row=0, column=0, sticky=W)
for item in items:
c=Checkbutton(self.appD, text=item, variable=item)
for x in range(1, 3):
c.grid(row=x, column=0, sticky=W)
button_Done=Button(self.appD, text='Done')
button_Done.grid(row=4, column=0, sticky=W)
self.root.mainloop()
答案 0 :(得分:1)
您每次迭代都会覆盖c
的值,因此最终只能保存最后一个值。尝试将复选框保存到列表,然后遍历该列表。
class Items(Daily):
def __init__(self):
super().__init__()
self.appD=Frame(self.root, padx=20, pady=20)
self.appD.grid(row=0, column=0)
self.itemsAl()
def itemsAl(self):
items=['item1', 'item2', 'item3']
variable=IntVar()
check_boxes={item: IntVar() for item in items}
label_Lbl=Label(self.appD, text='label', )
label_Lbl.grid(row=0, column=0, sticky=W)
cboxes = [
Checkbutton(self.appD, text=item, variable=item) for item in items
]
for r, c in enumerate(cboxes, 1)
c.grid(row=r, column=0, sticky=W)
button_Done=Button(self.appD, text='Done')
button_Done.grid(row=4, column=0, sticky=W)
self.root.mainloop()