Опрацювання зображень
Малювання в Tkinter реалізовано за допомогою віджету Canvas. Це функціонал високого рівня, який дозволяє створювати графіку в Tkinter . Малювання можна використовувати для створення графіків статистики, саморобних віджетів і навіть невеликих ігор.
При створенні екземпляра Canvas необхідно вказати його ширину і висоту. При розміщенні геометричних примітивів та інших об'єктів вказуються їх координати на полотні. Точкою відліку є верхній лівий кут.
from tkinter import * # імпортування графічної бібліотеки
root = Tk() # створення головного вікна
c = Canvas(root, width=200, height=200) # створення полотна 200 x 200
c.pack()
root.mainloop() # задання команди відображення вікна при запуску
Малювання ліній (метод create_line)
from tkinter import * # імпортування графічної бібліотеки
root = Tk() # створення головного вікна
c = Canvas(root, width=200, height=200) # створення полотна
c.pack()
c.create_line(15, 10, 180, 100) # малювання лінії з початком в #точці (15,10) та кінцем (180,100)
c.create_line(50, 180, 170, 120, # координати другої лінії
fill='red', # колір лінії
width=5, # ширина лінії
dash=(10, 2), # для малювання штрихами (довжина #пунктиру, довжина пропуску)
activefill='yellow', # колір лінії, коли над нею мишка
arrow=LAST, # розміщення стрілки в кінці лінії
arrowshape="10 30 10") # розміри стрілки
root.mainloop() # задання команди відображення вікна при запуску
Малювання прямокутників (метод create_rectangle)
from tkinter import * # імпортування графічної бібліотеки
root = Tk() # створення головного вікна
c = Canvas(root, width=200, height=200) # створення полотна шириною та висотою 200
c.pack()
c.create_rectangle(10, 10, 100, 190) # малювання першого прямокутника з лівою верхньою вершиною (10,10) та
# правою нижньою (100,190)
c.create_rectangle(120, 50, 190, 120, # вершини другого прямокутника
fill='lightpink', # колір заливки
outline='blue', # колір межі
width=3, # ширина межі
activedash=(5, 4)) # коли над прямокутником миша, межа стає штриховою
root.mainloop() # задання команди відображення вікна при запуску
Малювання ламаної (метод create_polygon)
from tkinter import * # імпортування графічної бібліотеки
root = Tk() # створення головного вікна
c = Canvas(root, width=200, height=200)
c.pack()
c.create_polygon(160, 10, 20, 180, 180, 90, # координати вершин
fill='orange', # колір заливки
outline='black') # колір межі
root.mainloop() # задання команди відображення вікна при запуску
Малювання овалів (метод create_oval)
from tkinter import * # імпортування графічної бібліотеки
root = Tk() # створення головного вікна
c = Canvas(root, width=200, height=220)
c.pack()
c.create_oval(10, 10, 190, 100) # малювання першого овалу
c.create_oval(50, 110, 150, 210, # вершини прямокутника, у який #вписується овал
width=10, # ширина межі
fill='lightyellow', # колір заливки
outline='lightgreen') # колір межі
root.mainloop() # задання команди відображення вікна при запуску
Додавання зображень на полотно
Для виведення зображення застосовується метод create_image(), який як обов'язково параметр приймає координати зображення. Для встановлення самого зображення в метод через параметр image передається посилання на зображення:
from tkinter import *
root = Tk()
root.title("Fish")
canvas = Canvas(bg="white", width=1980, height=1020)
canvas.pack()
fish_image = PhotoImage(file='fish.png')
canvas.create_image(50, 50, anchor=NW, image=fish_image)
root.mainloop()
Методи, призначені для переміщення об’єкта полотном:
canvas.move() переміщає графічний об’єкт, змінюючи значення його координат на задані величини:
canvas.move(item, x, y),
де canvas — назва об’єкта класу Сanvas, item — ідентифікатор (назва) графічного об’єкта ; x, y — значення зміщення по горизонталі та вертикалі (у пікселях).tk.update() примусово оновлює зображення; tk — назва об'єкта класу Тк (вікна програми).
time.sleep() затримує виконання програми:
time.sleep(t),
де t — величина затримки (в секундах).
'''Організуємо горизонтальний рух круга по полотну. Перший створений об’єкт (круг) автоматично отримує ідентифікатор 1:'''
import time
from tkinter import*
tk = Tk()
canvas = Canvas(tk, width = 400, height = 400)
canvas.pack()
canvas.create_oval(10, 10, 30, 30, fill = 'red')
for x in range(0, 60):
canvas.move(1, 5, 0) # Переміщення об’єкта із ідентифікатором 1
tk.update()
time.sleep(0.05)
'''Блок коду в циклі for призначено для пересування круга по полотну. Зокрема, команда canvas.move(1, 5, 0) пересуне об’єкт із ідентифікатором 1 (це і є круг) на 5 пікселів праворуч і 0 пікселів по вертикалі.
Для пересування ліворуч знадобилася б команда canvas.move(1, –5, 0).
Для руху по діагоналі слід змінювати одночасно координати х і у:
canvas.move(1, 5, 5).'''
ПРАКТИЧНА РОБОТА (частина 1)
Створити програму переміщення маленької рибки по екрану (завантажте зображення рибки з сайту вчителя).
УВАГА! Зображення мають розміщуватись у папці поруч з файлом програми!
ПРАКТИЧНА РОБОТА (частина 2)
Створіть програму, що за обраним сезоном (використайте перемикачі) виводитиме зображення зими, весни, літа або осені.
1. Завантажте з сайта вчителя 4 зображення сезонів.
2. Створіть об’єкти для кожного з 4 зображень.
3. Створіть групу з 4 перемикачів з відповідними написами.
4. Опишіть функцію, що буде змінювати зображення відповідно до обраного перемикача.
УВАГА! Зображення мають розміщуватись у папці поруч з файлом програми!
ДОМАШНЄ ЗАВДАННЯ
Виконати Практичну роботу
Результат надіслати на пошту вчителя voronenko@54.edu.ks.ua