Tkinter复选框问题

时间:2019-03-12 11:53:19

标签: python tkinter

我正在尝试创建一个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()

1 个答案:

答案 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()