【问题标题】:How can I destroy the buttons generated using a for loop (after been clicked...)如何销毁使用 for 循环生成的按钮(单击后...)
【发布时间】:2020-12-01 17:14:04
【问题描述】:

我已经根据列表 output1 生成了按钮名称。

所以,这个程序将分别创建 4 个按钮,从 'key1' 到 'key4' ,每当我点击按钮key1,搜索框B将被“key1”替换 ,类似地,按键2,key3,key4将分别替换搜索框B中的"key2","key3","key4"...

我的目标是一旦我点击这些按钮之一,它会在搜索框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>]

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    当您迭代 Autput 时,k 是每个按钮并且不索引:

    for k in Autput1:
        k.destroy()
    

    如果您使用的是range(len()),那么它将起作用,因为您将使用索引进行迭代:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多