Подтвердить что ты не робот

Как очистить холст Tkinter?

Когда я рисую форму, используя:

canvas.create_rectangle(10, 10, 50, 50, color="green")

Поддерживает ли Tkinter то, что он был создан?

В простой игре, которую я делаю, мой код имеет один Frame создать кучу прямоугольников, а затем нарисовать большой черный прямоугольник, чтобы очистить экран, а затем нарисовать другой набор обновленных прямоугольников и т.д.

Я создаю тысячи объектов прямоугольника в памяти?

Я знаю, что вы можете назначить код выше переменной, но если я этого не сделаю и просто рисую непосредственно на холсте, он останется в памяти или просто нарисует пиксели, как в холсте HTML5

4b9b3361

Ответ 1

Каждый элемент canvas - это объект, который отслеживает Tkinter. Если вы очищаете экран, просто рисуя черный прямоугольник, тогда вы эффективно создали утечку памяти - в конечном итоге ваша программа выйдет из строя из-за миллионов объектов, которые были нарисованы.

Чтобы очистить холст, используйте метод delete. Дайте ему специальный параметр "all" для удаления всех элементов на холсте (строка "all" "- это специальный тег, который представляет все элементы на холсте):

canvas.delete("all")

Если вы хотите удалить только определенные элементы на холсте (например, объекты переднего плана, оставив на экране фоновые объекты), вы можете назначить теги каждому элементу. Затем вместо "all" вы можете указать имя тега.

Если вы создаете игру, вам, вероятно, не нужно удалять и воссоздавать элементы. Например, если у вас есть объект, который перемещается по экрану, вы можете использовать move или coords для перемещения элемента.

Ответ 2

Элементы, нарисованные на холсте, являются постоянными. create_rectangle возвращает идентификатор элемента, который необходимо отслеживать. Если вы не удалите старые предметы, ваша программа в конечном итоге замедлит работу.

От Fredrik Lundh Введение в Tkinter:

Обратите внимание, что элементы, добавленные в холст, сохраняются до тех пор, пока вы их не удалите. Если вы хотите изменить рисунок, вы можете использовать такие методы, как coords, itemconfig и move, чтобы изменить элементы или использовать delete для удалите их.

Ответ 3

Да, я считаю, что вы создаете тысячи объектов. Если вы ищете простой способ удалить кучу из них сразу, используйте теги canvas описанные здесь. Это позволяет выполнять ту же операцию (например, удаление) на большом количестве объектов.