Анімація в Python

 В Python анімація - це ілюзія руху. Іноді це потрібно використати в програмах. Анімація створюється швидкою зміною зображень.

Методи, призначені для переміщення об'єкта полотном:

canvas.move(oval, x, y) - переміщує oval в задані координати.

x, y - зміщення по горизонталі та вертикалі.

tk.update() - примусово оновлює зображення

time.sleep(t) - затримує виконання програми на час t в секундах

Створимо проєкт руху круга по полотну в Python. Вправо, вниз, вліво, вверх, по діагоналі вниз, вліво, по діагоналі вверх, вправо.

import time from tkinter import* tk = Tk() canvas = Canvas(tk, width = 400, height = 400) canvas.pack() canvas.create_oval(10, 10, 30, 30, fill = 'lime') for x in range(0, 60): canvas.move(1, 5, 0) # Переміщення вправо tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, 0, 5) # Переміщення вниз tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, -5, 0) # Переміщення вліво tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, 0, -5) # Переміщення вверх tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, 5, 5) # Переміщення по діагоналі вправо вниз tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, -5, 0) # Переміщення вліво tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, 5, -5) # Переміщення по діагоналі вверх tk.update() time.sleep(0.02) for x in range(0, 60): canvas.move(1, -5, 0) # Переміщення вправо tk.update() time.sleep(0.02)

Блок циклу for пересуває овал ко полотну. Об'єкт має назву 1, а цифри 0, 5 - пересуне об'єкт 0 пікселів по горизонталі і 5 пікселів по вертикалі.

Програмування реакції об'єктів на події

У Python можна створити проєкт, коли об'єкт буде рухатись тоді, коли відбувається певна подія.

Для встановлення події та її виклику використовується команда:

canvas.bind_all('<подія>', функція)

Приклад функції та обробника події:

from tkinter import* def move_oval(event): canvas.move(1, 5, 0) tk = Tk() canvas = Canvas(tk, width = 400, height = 400) canvas.pack() canvas.create_oval(10, 10, 30, 30, fill = 'lime') canvas.bind_all('<KeyPress-Right>', move_oval)

В цьому проекті овал буде рухатись тоді, коли ми будемо натискати стрілку вправо на клавіатурі.

Застосування інших клавіш на клавіатурі:

def move_oval(event): if event.keysym == 'Up': canvas.move(1, 0, –3) elif event.keysym == 'Down': canvas.move(1, 0, 3) elif event.keysym == 'Left': canvas.move(1, –3, 0) elif event.keysym == 'Right': canvas.move(1, 3, 0)

Up - вгору

Down - вниз

Left - вліво

Right - вправо.

Далі застосовуємо функцію move_oval() ля обробки натискання будь-якої клавіші: canvas.bind_all('<Key>', move_oval)

Створення анімації з використанням графічних файлів.

Використовуючи анімацію, запрограмуємо рух таким чином:

1. Підготуємо кілька картинок для анімації, з форматом файлів png, наприклад метелики. Назвати їх: 1.png, 2.png, 3.png.

2. Перенести файли в папку з проектом.

3. Створюємо проект:

import time from tkinter import * def play(): anim=['1.png', '2.png', '3.png'] # список імен файлів canvas = Canvas(root, width=200, height=200) # створення полотна canvas.place(x = 1, y = 1) # відображення полотна for i in range(3): my_image = PhotoImage(file=anim[i]) canvas.create_image(0, 0, anchor=NW, image=my_image) root.update() # оновлення полотна time.sleep(0.1) # пауза на 0.1 секунди root.after(10, play) # виклик функції play() через 10 мс root = Tk() # створюємо вікно програми root.title(' Політ метелика') root.geometry('400x450') anim=['1.png','2.png','3.png'] # список імен файлів canvas = Canvas(root, width=200, height=200) # створення полотна canvas.place(x = 1, y = 1) # відображення полотна play() #виклик функції play() root.mainloop() # запуск головного циклу обробки подій

Функція play() призначена для зміни зображень.

Метод root.after викликається для об’єкта root з аргументами: 0 мс; play, тобто зразу ж після завершення функція play() викликається повторно, і зміна зображень продовжується.


Коментарі