Как я могу уничтожить кнопки, созданные с помощью цикла for (после нажатия …)

#python #tkinter

#питон #tkinter

Вопрос:

Я уже сгенерировал кнопки, название которых основано на выводе списка 1.

Итак, эта программа создаст 4 кнопки соответственно от ‘key1’ до ‘key4’, всякий раз, когда я нажимаю кнопку key1, поле поиска B будет заменено на «key1», аналогично, кнопки 2, key3, key4 заменят «key2», «key3», «key4» соответственно в окне поиска B…

Моя цель состоит в том, чтобы, как только я нажму одну из этих кнопок, она вставит слово в поле поиска B, и эти 4 кнопки будут автоматически удалены

 root = Tk()

def setTextInput(text):
    B.delete(0,"end")
    B.insert(0, text)
    for k in Autput1:
        Autput1[k].destroy()    

j=0

if j==0:

    output1 = ['key1','key2','key3','key4']
    
    global Autput1
    Autput1 = []
    
    k=0
    
    for e in output1:                                                                                             
        Autput1.append(Button(root,text=e,command=lambda e=e:setTextInput(str(e))))
        Autput1[k].grid()
        print(Autput1)
        k =1

A = Label(root,text="Search your song here",font=('Roboto',10),bg='#c4302b')
A.grid(row=0,column=0,columnspan=2,padx=10,pady=10)

B = Entry(root,font=('Roboto',20))
B.grid(row=1,column=0,columnspan=2,padx=10,pady=10)

C= Button(root,image=img,command=getsong)
C.grid(row=1,column=2,padx=10,pady=10)

root.mainloop()   
 

Это часть того, как я пытаюсь уничтожить кнопку, которая добавляется внутри списка Autput1.

   for k in Autput1:
    Autput1[k].destroy()
 

и это ошибка и единственная проблема, которую я пытаюсь исправить

  TypeError: list indices must be integers or slices, not Button
 

Возможно, вам интересно, что такое значение Autput1

    [<tkinter.Button object .!button2>, <tkinter.Button object .!button3>, <tkinter.Button object 
   .!button4>, <tkinter.Button object .!button5>]
 

Ответ №1:

По мере повторения повторяется Autput k каждая кнопка и не индексируется:

 for k in Autput1:
    k.destroy()
 

Если вы используете range(len()) , то это сработает, потому что тогда вы будете выполнять итерацию с использованием индекса:

 for k in range(len(Autput1)):
    Autput1[k].destroy()