Глава 18 · Canvas по-настоящему

Item ID: что возвращает create_*

Число, которое create_* возвращает — не пустая формальность: это способ вернуться к фигуре позже.

create_* возвращает идентификатор

Каждый вызов canvas.create_line/rectangle/oval(...) возвращает целое число — item ID только что созданного элемента. Если его не сохранить, фигура всё равно нарисуется, но обратиться к ней позже будет нечем:

item_id.py
item_id = canvas.create_rectangle(10, 10, 100, 60, outline="blue")
print(item_id)   # например, 1 — конкретное число зависит от того, сколько элементов уже создано

Этот номер пригождается для трёх вещей, которые мы разберём дальше в главе:

Зачем помнить item_id
coords(item_id, ...)
изменить координаты существующего элемента
раздел 18.18–18.19
itemconfig(item_id, ...)
изменить цвет/толщину без пересоздания
раздел 18.19
delete(item_id)
убрать именно этот элемент, не все остальные
разделы 18.19, 18.24
item_id — не индекс списка и не id() объекта Python
Соблазн считать, что item_id — это позиция в списке («первая фигура — id 0», «вторая — id 1») ошибочен: Canvas выдаёт номера по своим правилам и не обязан начинать с нуля или идти без пропусков после удаления элементов. Не полагайтесь на конкретные значения — только на то, что каждый item_id уникально ссылается на один элемент.
Практика: item ID
Автоматическая проверка — храним фигуры по item_id как по ключу словаря, а не по индексу списка
Открыть практику →