Python 3 - Tkinter destroy () не работает для динамических кнопок - PullRequest
0 голосов
/ 01 марта 2019

Мой код получает имя компьютера, затем просматривает папки и извлекает имена этих папок, чтобы создать флажки, а затем показывает их пользователю, чтобы они могли выбрать те, с которыми нужно работать.Однако, если вы измените имя компьютера, я хочу удалить имена всех текущих флажков и отобразить новые имена из нового имени компьютера.Я пробовал destroy () несколькими способами, но он просто не работает.Я знаю, что это связано с работой с сетками.

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

1 Ответ

0 голосов
/ 01 марта 2019

Когда 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...