Как очистить холст Tkinter?
когда я рисую фигуру с помощью:
canvas.create_rectangle(10, 10, 50, 50, color="green")
отслеживает ли Tkinter тот факт, что он был создан?
в простой игре, которую я делаю, мой код имеет один Frame
создайте кучу прямоугольников, а затем нарисуйте большой черный прямоугольник, чтобы очистить экран, а затем нарисуйте другой набор обновленных прямоугольников и так далее.
Я создаю тысячи объектов прямоугольника в памяти?
Я знаю, что вы можете назначить код выше переменной, но если я не делайте этого и просто рисуйте прямо на холсте, он остается в памяти или просто рисует пиксели, как на холсте HTML5?
3 ответов
каждый элемент холста-это объект, который отслеживает Tkinter. Если вы очищаете экран, просто рисуя черный прямоугольник, то вы фактически создали утечку памяти, в конце концов, ваша программа рухнет из-за миллионов элементов, которые были разработаны.
чтобы очистить холст, используйте удалить метод. Дайте ему специальный параметр "all"
удалить все элементы на холсте (строка "all"
" - это специальный тег, который представляет всем пунктам холст):
canvas.delete("all")
если вы хотите удалить только определенные элементы на холсте (например, объекты переднего плана, оставляя фоновые объекты на дисплее), вы можете назначить теги каждому элементу. Тогда вместо "all"
, вы можете указать имя тега.
если вы создаете игру, вы, вероятно, не нужно удалять и воссоздавать предметы. Например, если у вас есть объект, который движется по экрану, вы можете использовать движение или координаты метод для перемещения элемента.
предметы, нарисованные на холсте являются постоянными. create_rectangle
возвращает идентификатор элемента, который нужно отслеживать. Если вы не удалите старые элементы, ваша программа в конечном итоге замедлится.
от Фредрика Лундха введение в Tkinter:
обратите внимание, что элементы, добавленные на холст, сохраняются до их удаления. Если вы хотите изменить чертеж, вы можете использовать такие методы, как
coords
,itemconfig
иmove
изменить элементы, или использоватьdelete
в удалить их.
Да, я считаю, что вы создаете тысячи объектов. Если вы ищете простой способ удалить их сразу, используйте canvas tags описано здесь. Это позволяет выполнять одну и ту же операцию (например, удаление) с большим количеством объектов.