Каждый раз, когда вы создаете новый текстовый виджет, вы переопределяете предыдущий.Поэтому вы можете удалить только последний созданный элемент.
Возможное решение: создать виджеты кнопок и меток и сохранить их в списке.
import tkinter as tk
class QueueApp(tk.Tk):
def __init__(self):
super().__init__()
self.title(' Queue')
self.minsize(200, 200)
self.x = 0
self.frame1=tk.Frame(self)
self.frame1.place(x=0,y=0,width=70,height=170,anchor='nw')
self.frame2=tk.Frame(self)
self.frame2.place(x=40,y=175,anchor='nw')
self.frame3 = tk.Frame(self)
self.frame3.place(x=100, y=0, width=50, height=170, anchor='nw')
add=tk.Button(self.frame2,text='add',command=self.add_text)
add.pack()
#create lists
self.myDeleteButtons = []
self.myTextLabels = []
def add_text(self):
self.button_name = "delete"+str(self.x)
self.text=tk.Label(self.frame1,text=self.x)
self.text.pack(side=tk.TOP)
#lambda: for passing counter variable as argument
self.delete_button=tk.Button(self.frame3,text=self.button_name,
command=lambda x=self.x: self.delete(x))
self.delete_button.pack(side=tk.TOP)
#add widgets in list
self.myDeleteButtons.append(self.delete_button)
self.myTextLabels.append(self.text)
self.x += 1
def delete(self, button_nr):
#use argument as index
self.myDeleteButtons[button_nr].destroy()
self.myTextLabels[button_nr].destroy()
if __name__=='__main__':
app = QueueApp()
app.mainloop()
При удалении всех кнопок можно установить переменную счетчика.в ноль.