Анімація в 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() викликається повторно, і зміна зображень продовжується.
Коментарі
Дописати коментар