Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Анимация с использованием библиотеки tkinter и Canvas
Мы подошли вплотную к вопросу анимации. Но оказывается у Canvas есть и специфические средства анимированный. В прошлой статье мы использовали вариант Canvas.coords() для задания новых координат объекта. Тем самым можно сделать объект движущимся. Но есть и нечто специфическое. Вот об этом мы сегодня начнём рассказывать.
Ниже (рисунок 1) представлена программа показывающая движение шарика (см. рисунок 2). Первоначально шарик находится в середине окна. По нажатию клавиши Enter он начинает двигаться в начале вправо, ударяется о "стенку", начинает двигаться влево и т.д. По нажатию клавиши ESC он останавливается. Движение снова может быть возобновлено нажатием Enter. В общем такая простая анимация. Но тут важны три механизма: 1. Сам процесс движения. 2. Отскакивание от стенок. 3. Остановка и возобновление движения.
Пояснения к программе
- Прежде всего обращу внимание на очень полезный метод Canvas.move(), позволяющий двигать объекты, которые расположены на холсте. Нужно указать только сам объект (его номер) и шаги по осям X и Y. Шаги, как вы понимаете могут быть и положительные и отрицательные.
- Текущее положен ия объекта (координаты верхнего левого и нижнего правого угла прямоугольника, куда вписан объект) можно узнать с помощью метода Canvas.coords(). Получив координаты, мы можем проверить, не достиг ли объект стенки. По достижению стенки мы меняем знак шага (self.dd1) на противоположный. Вот, в сущности, и весь алгоритм движения шарика, который движется от одной стенки к другой.
- Обращу внимание на переменную self.ex. Эта переменная играет двоякую роль. Не позволяет многократно запускать цикл движения нажатием Enter. С другой стороны эта же переменная позволяет выйти из цикла движения, т.е. остановить объект.
Замечание
Цикл, который мы используем для анимации, можно регулировать, путём использования time.sleep(N) для задержки между шагами - где N - количество секунд, напомню, что N может быть дробной величиной.
С анимацией мы пока не закончили. Продолжим в следующей статье.
Пока всё! Продолжение следует...
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.