Python 3 Tkinter destroy()不适用于动态复选按钮

2024-04-26 13:10:10 发布

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

我的代码得到一个计算机名,然后查看文件夹并拉取这些文件夹的名称以创建复选框,然后将它们显示给用户,以便用户可以选择要使用的文件夹。但是,如果您更改计算机名,我希望删除所有当前复选框的名称,并显示新计算机名中的新名称。我尝试过多种方法来销毁(),但都不起作用。我知道这和网格有关。你知道吗

def CreateBoxes(folders):

    if len(checkBoxList) != 0: #if there are already checkboxes then delete
        for i in folders:
            chk.destroy()

    count=0
    for i in folders: #Creates checkbuttons for each folder received
        checkBoxList[i]=IntVar()
        chk = Checkbutton(window, text=str(i), variable=checkBoxList[i])
        chk.grid(row=0+count,column=4)
        count += 1

Tags: 方法代码用户in文件夹名称网格for
1条回答
网友
1楼 · 发布于 2024-04-26 13:10:10

chk.destroy()执行时,Python不理解chk所指的内容。您可能在该函数的早期执行中创建了一个名为chk的变量,但在函数返回后该名称就不存在了。你知道吗

一种可能的解决方案是保留对每个复选框的外部引用。然后你就可以在以后访问每一个并销毁它们。你知道吗

checkboxes = []

def CreateBoxes(folders):
    if len(checkBoxList) != 0: #if there are already checkboxes then delete
        for chk in checkboxes:
            chk.destroy()
        checkboxes.clear()

    count=0
    for i in folders: #Creates checkbuttons for each folder received
        checkBoxList[i]=IntVar()
        chk = Checkbutton(window, text=str(i), variable=checkBoxList[i])
        chk.grid(row=0+count,column=4)
        checkboxes.append(chk)
        count += 1

相关问题 更多 >