Можете ли вы изменить атрибуты объекта Python Canvas после создания?

Я пытаюсь смоделировать американский светофор, с 3 кругами на прямоугольнике, все нарисовано на наборе Canvas. Предполагается, что симуляция отражает "анимацию", изменяя, какой свет отображается каждые 2 секунды в следующем порядке: зеленый> желтый> красный> зеленый и т. Д. Навсегда.

Единственный способ сделать это - использовать шаблон canvas.move(), canvas.after(), canvas.update(), чтобы переместить заполненный овальный объект для наложения одного незаполненного круга за раз. Я получил логику, чтобы перемещать круг на правильной скорости и в правильном порядке. Дело в том, что я просто создаю экземпляр круга, заполненного "зеленым", но я не могу изменить его на "желтый" или "красный", используя этот метод. Кажется глупым иметь метод canvas.delete ("заполненный") и перерисовывать его в новом месте с разным заполнением каждые 2 секунды, потому что для такой простой программы многое нужно сделать.

Вопрос 1: Есть ли способ, которым я могу просто изменить fill вариант для моего заполненного объекта Canvas по желанию, используя какой-либо метод или другие средства?

Вопрос 2: я неправильно подхожу к этому сценарию? Есть ли лучший способ симулировать это?

1 ответ

Решение

Да, вы должны иметь возможность изменять настройки холста с помощью config,

Аналогично, используйте itemconfig изменить элементы на холсте. Это требует, чтобы вы сохранили дескриптор элемента или отметили их.

Пример из tkinterbook:

i = w.create_line(xy, fill="red")

w.coords(i, new_xy) # change coordinates
w.itemconfig(i, fill="blue") # change color
Другие вопросы по тегам