У меня в основном такой же вопрос, но я не чувствую, что было отвечено правильно:разрушающих динамически созданный виджет
Tkinter: How can I dynamically create a widget that can then be destroyed or removed?
accepted answer является:
Вы хотите хранить динамически созданные виджеты в списке. Есть что-то вроде
dynamic_buttons = [] def onDoubleClick(event): ... button = Button(...) dynamic_buttons.append(button) button.pack() You can then access the buttons for removal with, say, dynamic_buttons[0].destroy()
Вы можете увидеть, что ссылка они говорят не изменяется, при этом число 0 используется. Но когда вы динамически создаете виджеты, как вы связываете эти ссылки с кнопками?
Скажите, что вы создаете виджет Toplevel (отображает содержимое файла) и хотите иметь кнопку, чтобы закрыть виджет. Динамическое создание позволит открыть несколько файлов. Проблема в том, что даже с этим списком, как кнопка «знает», к какому виджетам она принадлежит, поскольку нет жесткой ссылки (отлично, что у вас есть список элементов, но кнопка 5 уровня 5 не имеет понятия, они 5 в списке). Всегда будет только одна «активная» версия кнопки и верхнего уровня, и эту можно удалить.
aanstuur_files = []
aanstuur_frames = []
aanstuur_buttons = []
def editAanstuur():
openfiles = filedialog.askopenfilenames()
if not openfiles:
return
for file in openfiles:
newtop = Toplevel(nGui, height=100, width=100)
labelTitle = Label(newtop, text=file).pack()
newButton = Button(newtop, text="save & close", command= ...).pack()
aanstuur_files.append(file)
aanstuur_buttons.append(newButton)
aanstuur_frames.append(newtop)
Ах да, я знаю об этой проблеме .pack(). Дело в том, что я хочу сохранить файл, который является дочерним элементом этого верхнего виджета перед закрытием, как получить доступ к содержимому этого текстового поля и записать его в файл? – PascalVKooten
Получил это, давая дополнительные аргументы. Большое спасибо. – PascalVKooten
@Dualinity: еще лучшее решение, чем держать нагромождение аргументов, - это создать свой собственный класс. Я обновил свой ответ, чтобы дать представление о том, как вы можете это сделать. –