Python 如何重复删除不同名称的项目

Python 如何重复删除不同名称的项目,python,tkinter,Python,Tkinter,最近我正在开发一个程序,当点击一个按钮时,它会删除他们通过.yml文件制作的所有tkinter按钮。以下是我的意思的一个例子: (All TKinter Root Init Here) button1 = Button(root, text="hi") button2 = Button(root, text="hi again") button3 = Button(root, text="hi again again") button

最近我正在开发一个程序,当点击一个按钮时,它会删除他们通过.yml文件制作的所有tkinter按钮。以下是我的意思的一个例子:

(All TKinter Root Init Here)

button1 = Button(root, text="hi")
button2 = Button(root, text="hi again")
button3 = Button(root, text="hi again again")
button4 = Button(root, text="OK this is getting tiring")
button5 = Button(root, text="go away")
button6 = Button(root, text="...")

def del_all():
    for i in range(999999999):
        button(i).place_forget() #I was hoping to make button(i) give the output button1, then button2, and so on.
 
root.mainloop()

解决方案取决于按钮的命名/存储方式

例如,如果按钮是一个列表。比如:

buttons = ['button1', 'button2', 'button3', 'button4']
然后,您可以通过调用以下命令进行删除:

buttons.remove()

这将“清除”列表。

在tkinter中尝试
nametowidget
,例如:

import tkinter as tk

r = tk.Tk()

for i in range(5):
    tk.Button(r,text=i).pack()

r.nametowidget(".!button").pack_forget()
r.mainloop()
这将删除第一个按钮。如果要删除第二个按钮,需要使用
r.nametowidget(“!button2”).pack\u forget()

因此,对于您的代码,您可能需要使用:

def del_all():
    root.nametowidget(".!button").place_forget()
    for i in range(2, 999999999):
        root.nametowidget(".!button"+str(i)).place_forget()
关于
名称Widget
中的参数,是一个清晰的描述


您还可以使用
winfo_children
.widgetName
检查它是否是一个按钮,如:

import tkinter as tk

r = tk.Tk()

tk.Label(r, text="test").pack()

for i in range(5):
    tk.Button(r,text=i).pack()

for i in r.winfo_children():
    if i.widgetName == 'button':
        i.pack_forget()

r.mainloop()

我想你不明白我在说什么。我的目标不是从列表中删除项目,而是删除tkinter按钮小部件。这是相同的想法。你可以将tkinter按钮小部件放入列表并删除列表。问题是,我是一名初学者,所以我不知道如何操作。如果不了解按钮的名称,很难说,请包含更多代码