Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Графика в tkinter (Canvas), элементы анимации, продолжение (.after())

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Использование Canvas.after() для создания анимационных приложений в tkinter

Продолжаем рассматривать анимацию в tkinter, начатую в прошлой статье.

Сегодня мы рассматриваем другой механизм анимации. Ниже (рисунок 1) представлена программа, подобная программе из предыдущей статьи, но с двумя шариками (см. Рисунок 2) - один двигается в горизонтальном направлении, а другой в вертикальном.

Рисунок 1. Программа с анимацией двух шариков. Текст программы см. ниже по ссылке
Рисунок 1. Программа с анимацией двух шариков. Текст программы см. ниже по ссылке
primer361.py

Пояснение к программе

  • Мы добавили (см. программу из предыдущей статьи) ещё один шарик (self.kr2). Изначально оба шарика находятся в одном месте (300, 190).
  • Для движения шариков используется функция motion(), но теперь в ней нет цикла. В конце функции запускается библиотечный метод Canvas.after(). Метод .after() имеет два параметра: 1-й параметр - количество миллисекунд задержки, 2-й параметр - имя запускаемой функции. Т.е. как бы организуется непрерывный цикл с задержкой. На каждой итерации цикла происходит шаг движения шариков. Лишний раз подчеркну, что функция .after() устроена так, что здесь нет рекурсии, поэтому нет переполнения стека.
  • На каждом шаге проверяется, не достиг ли шарик стенки (левой, правой. верхней, нижней). Если достиг, то у соответствующего шарика меняется знак шага.
  • Как и ранее переменная self.ex используется для сигнала того, чтобы остановить движения шариков, а также, чтобы не было повторного запуска функции motion().
Рисунок 2. Окно с двумя движущимися шариками
Рисунок 2. Окно с двумя движущимися шариками

Замечание
При программной анимации у вас параметра, позволяющие регулировать скорость движения: первый параметр метода .after() и и шаг движения в методе .move(). Нужно просто эмпирически подобрать их значения.

Пока всё! Продолжение следует...

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

Какой смысл в ваших летающих по экрану шариках? Напишите лучше программу решения системы дифференциальных уравнений в частных производных
Какой смысл в ваших летающих по экрану шариках? Напишите лучше программу решения системы дифференциальных уравнений в частных производных