如何忘记忘记由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()
标签仍然在列表中,并且没有被销毁。
答案 0 :(得分:1)
与任何其他小部件一样,您只需要保留对它的引用。例如,您可以将每个窗口小部件附加到列表中,然后遍历列表以删除窗口小部件。
让我们来看看这段代码:
def update1():
try:
openArtist.pack_forget()
artistLab.pack_forget()
labels[0].destroy()
print labels
getScrobbledTracksArtist()
except NameError:
getScrobbledTracksArtist()
您只是删除列表中的第一个标签,然后您无法将其从列表中删除。你需要做的是循环遍历列表,销毁每个小部件。然后,您可以重新初始化列表:
for label in labels:
label.destroy()
labels = []
但是,您还有另一个问题,即labels
可能是本地变量。您需要将其声明为全局,以便两个不同的函数能够访问和修改列表。
这些都与tkinter无关,这只是所有python对象的工作方式。