Я хотел бы получить чистое и эффективное решение для удаления / уничтожения встроенных объектов Canvas.Когда я говорю «встроенные объекты Canvas», я имею в виду холст, который был упакован в другой холст.
Мое текущее решение - пройти и вручную удалить («все») .destroy () каждого холста по отдельности.Это решение является чрезвычайно громоздким, его трудно упорядочить, поддерживать и заставляет меня беспокоиться о том, что я не собираю мусор надлежащим образом.
Эксперимент с приведенным ниже кодом показывает, что ничего, кроме удаления самого объекта (del (var)) фактически заставит print (var) выдать ошибку.в противном случае, после того, как var.delete ("all") и var.destroy () print (var) выдаст.! canvas
from tkinter import *
# some arbitrary arrangement of canvas objects
root = Tk()
root.geometry("1600x900")
# highest level
topLevel = Canvas(root, bg="blue")
topLevel.pack(fill=BOTH, expand=1)
# second level
redTop = Canvas(topLevel, bg="red")
redTop.pack(side=TOP, fill=X)
greenBottom = Canvas(topLevel, bg="green")
greenBottom.pack(side=BOTTOM, fill=X)
# third level
blackBox = Canvas(redTop, bg="black")
blackBox.pack(side=LEFT)
whiteBox = Canvas(greenBottom, bg="white")
whiteBox.pack(side=RIGHT)
mainloop()
# possible cleanup methods
def my_current_solution():
# starting with the leaf nodes and traversing back in order
blackBox.delete("all")
blackBox.destroy()
del blackBox
redTop.delete("all")
redTop.destroy()
del redTop
whiteBox.delete("all")
whiteBox.destroy()
del whiteBox
greenBottom.delete("all")
greenBottom.destroy()
del greenBottom
topLevel.delete("all")
topLevel.destroy()
del topLevel
def same_but_automated(list):
# assume list is made up of canvases inserted in proper order
for canvas in list:
canvas.delete("all")
canvas.destroy()
del canvas
def what_I_hope_is_okay():
# eliminating only the root *hopefully* does not cause a serious memory leak?
topLevel.delete("all")
topLevel.destroy()
del topLevel
Нет сообщений об ошибках, просто хочу узнать, не засоряется ли мой код илипамять излишне.В поисках более чистого, более простого и эффективного решения.