忘记了一个由forloop tkin创建的小部件

2024-10-04 11:22:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我该如何忘记由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循环中创建的小部件删除,但没有。你知道吗

示例如下:

在更新小部件之前 Before update

更新小部件后 After update

如您所见,只删除了小部件的一行。你知道吗

编辑

我试过复制,但对我不起作用。 我列了一个清单,确保标签被添加到清单中,它们是。你知道吗

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()

标签仍在清单中,没有被销毁。你知道吗


Tags: textnameinfordatalabelsif部件
1条回答
网友
1楼 · 发布于 2024-10-04 11:22:00

和其他小部件一样,您只需保留对它的引用。例如,您可以将每个小部件附加到一个列表中,然后遍历该列表以删除这些小部件。你知道吗

我们来看看这个代码:

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对象的工作方式。你知道吗

相关问题 更多 >