Почему не работает строка с модулем canvas

example = canvas.create_oval(x1 - x, y1 - x, x1 + x, y1 + x, fill = random.choice(color))
data["id"] = id(example)
circles.append(data)
data = {}
print(circles)
while True:
    pass 
    for circle in circles:
        x0, y0, x1, y1 = canvas.coords(circle["id"])

Выдает ошибку, хотя "id" проверено и является уникальным числом. Почему canvas.coords не принимает id круга? А пишет что объект не итерируемый.

Traceback (most recent call last):
  module moduli_oval.py line 24
TypeError: 'NoneType' object is not iterable

Ответы (1 шт):

Автор решения: insolor

Нужно убрать вызов функции id:

example = canvas.create_oval(x1 - x, y1 - x, x1 + x, y1 + x, fill = random.choice(color))
data["id"] = example  # было id(example)

Методы объекта Canvas, название которых начинается с create_, уже возвращают id объекта, который можно использовать в методе canvas.coords (и других).

Встроенная функция id возвращает "питоновский" id объекта, метод coords этот id не распознает как id объекта на Cavnas. id(example) - это не id круга, это id id круга (по факту - адрес объекта, который уже является id круга).

→ Ссылка