Есть ли способ удалить виджеты, созданные в цикле? Кнопки повторяют действие при нажатии - PullRequest
0 голосов
/ 24 октября 2019

Я читаю из базы данных и создаю кнопки, которые добавляют каждый элемент в корзину пользователя. Функция Add_To_Basket () добавляет элемент в корзину и сообщает пользователю, что в данный момент находится в корзине. Это работает нормально, однако в графическом интерфейсе, вместо замены уже сделанных ярлыков и кнопок, он добавляет новую корзину ниже, есть ли способ, чтобы этого не произошло?

Это часть моего класса и дает контекст для кнопки и метода, который она использует.

for i in range(No_Of_Items):
        New_ID = (i + 1)
        query = ("SELECT `Name` FROM Items WHERE ID = (%s)" %(New_ID))
        cursor.execute(query)
        Current_Item = cursor.fetchone()
        Text_For_Button = ("Add %s to Basket" %(Current_Item))
        Add_This_Item_Button = tk.Button(self, text = Text_For_Button, command = lambda Current_Item = Current_Item: self.Add_To_Basket(Current_Item, Basket))
        Add_This_Item_Button.pack()

def Add_To_Basket(self, Current_Item, Basket):
        Basket.append(Current_Item)
        Basket_Label = tk.Label(self, text= "CURRENT BASKET")
        Basket_Label.pack(pady = 10, padx = 10)
        for i in range(len(Basket)):
            Text_For_Label = Basket[i]
            Basket_label = tk.Label(self, text= Text_For_Label)
            Basket_label.pack(pady = 10, padx = 10)

        Finish_Button = tk.Button(self, text = "Finish Transaction", command = lambda: self.Finish_Transaction(Basket))
        Finish_Button.pack()

Я ожидаю, что пользователь будет показан

CURRENT BASKET
Orange
Pear 

, ноЯ получаю

CURRENT BASKET
Orange

CURRENT BASKET
Orange
Pear

Какой-нибудь совет, чтобы предотвратить это? Я попытался удалить виджеты и переделать их, однако, поскольку кнопки создаются в цикле, он удаляет только последний экземпляр.

...