【发布时间】:2014-04-02 20:00:16
【问题描述】:
我将如何忘记由for 循环创建的小部件?
例如,我这里有这段代码:
for getSong in a.findAll('name'):
z += 1
x += 1
if z == 11:
break
else:
text = ''.join(getSong.findAll(text=True))
data = text.strip()
songLab = Label(frame1, text=data)
之后,用户按下Button 并更新小部件,如下所示:
def update():
try:
openArtist.pack_forget()
artistLab.pack_forget()
songLab.pack_forget()
getScrobbledTracksArtist()
except NameError:
getScrobbledTracksArtist()
for 循环中创建的小部件不会删除其他小部件。
这里的例子:
更新小部件之前
更新小部件后
如您所见,只删除了一行小部件。
编辑
我尝试复制,但它不适合我。 我制作了一个列表,并确保将标签添加到列表中。
labels = []
for getSong in a.findAll('name'):
z += 1
x += 1
if z == 11:
break
else:
text = ''.join(getSong.findAll(text=True))
data = text.strip()
songLab = Label(frame1, text=data)
labels.append(songLab)
songLab.pack()
然后在按下Button 后,小部件会更新。
def update1():
try:
openArtist.pack_forget()
artistLab.pack_forget()
labels[0].destroy()
print labels
getScrobbledTracksArtist()
except NameError:
getScrobbledTracksArtist()
标签仍在列表中,没有被销毁。
【问题讨论】:
-
@BryanOakley 这不起作用,所以我认为它不是重复的。
-
如果它对您不起作用,那么您做错了。这里没有魔法:您需要一个小部件的引用才能删除或移除它。这不是 tkinter 问题,而是对象的工作方式。要在对象上调用方法,您需要对该对象的引用。列表是保存引用的完全可接受的地方。
-
@BryanOakley 我已经更新了我的问题,请看一下。
-
“标签仍在列表中,没有被销毁”——这种说法没有多大意义。一方面,您只是破坏了第一个标签,而不是所有标签。其次,一旦您销毁标签,您仍然需要将其从列表中删除。