dimanche 1 avril 2018

How to use a dictionary to create tkinter check boxes, then check which are ticked

I am trying to create a menu program in tkinter, where check boxes are created from items in a dictionary, then the total price of selected items is calculated when a button is clicked.

menu_items = {"Spam - £3" : 3, "Eggs - £7" : 7, "Chips - £1" : 1, "Beer - £2" : 2}

def widgets(self):
    # create menu list
    row = 1
    for item in menu_items:
        self.item = BooleanVar()
        Checkbutton(self,
                    text = item,
                    variable = self.item
                    ).grid(row = row, column = 0, sticky = W)
        row += 1

    calc_but = Button(self,
                      text = "Click to calculate",
                      command = self.calculate
                      ).grid(row = row + 1, column = 0, sticky = W)

    self.results_txt = Text(self, width = 20, height = 4, wrap = WORD)
    self.results_txt.grid(row = row + 2, column = 0, columnspan = 2)

This creates check boxes, button and text display just fine, but my problem comes with my calculate method.

def calculate(self):
    bill = 0
    for item in menu_items:
        if self.item.get():
            bill += menu_items.get(item)               

    msg = "Total cost - £" + str(bill)       
    self.results_txt.delete(0.0, END)
    self.results_txt.insert(0.0, msg)

It will add up everything (ticked or not), but only when the final check box is ticked. It displays 0 if the final item is not ticked.

I am not sure what my problem is, or if I am approaching this in the wrong way.




Aucun commentaire:

Enregistrer un commentaire