Теорія:

У мові Python існують різні способи роботи з графікою. Тобі відомі засоби модуля tkinter для створення графічного інтерфейсу — створення графічного вікна, розміщення у вікні графічних компонентів та програмування обробки подій для цих компонентів. Засобами tkinter можна створювати зображення та анімацію.
Створення вікна програми з написом і кнопкою
Згадаємо основні кроки зі створення програми з графічним інтерфейсом. Побудова програми починається зі створення вікна. У вікно додаються всі інші потрібні компоненти графічного інтерфейсу.

Проаналізуємо програмний код створення вікна з написом і кнопкою.
1.    from tkinter import *                       # імпорт змістy модуля tkinter
2.    def btn_click():                                # опис методу btn_click -
3.    lab.config(text = 'Успіхів!')   # обробника події натискання на кнопку.
4.    root = Tk()
5.    root.title ('Графічна програма')
6.    root.geometry('250x150')
7.    lab = Label(root, text = 'Помалюємо?', font = 'Arial 14')
8.    lab.place(x = 100, y = 1)
9.    btn = Button(root, text = 'Так', command = btn_click)
10.  btn. place(x = 50, y = 50)
11.  root.mainloop()  # запуск головного циклу обробки подій

У 4-му рядку створюється змінна root,  в якій зберігається об’єкт класу Tk(), який визначений у модулі tkinter
 
Об’єкт root  створює порожнє вікно, до якого можна додавати кнопки, текстові поля, холсти для малювання та інші віджети. Це основний клас модуля tkinter. У 7-му рядку створюється об'єкт lab класу Label,  який розміщено у вікні методом lab.place(x = 100, y = 1). У 9-му рядку створено кнопку — об’єкт класу Button. При створенні об’єкта btn першим аргументом указано змінну root (батьківський віджет), другим — 'Так'  (заголовок кнопки), третім — посилання на метод btn_click, який буде виконуватися в разі натискання на кнопку. Якщо зберегти й виконати цей код, побачимо вікно програми (рис. 1). При виконанні програми після натискання на кнопку заголовок напису зміниться на текст 'Успіхів!'.
 
1.PNG  Рис.1
Полотно для малювання
У tkinter зображення створюється в межах полотна — об’єкту класу Canvas. Тому перш, ніж записувати оператори для малювання, потрібно створити полотно.
Синтаксис створення об’єкта класу Canvas:
змінна = Canvas (батьківський_віджет, width=значення, height=значення)
Приклад:
Створити полотно розміром 500х500 пікселів.
from tkinter import *
root = Tk()
canvas = Canvas(root, width=500, height=500)
canvas.pack()
Для малювання ліній на полотні використовують координати.
Будь-яка точка на полотні може бути задана парою чисел (X, Y), де Х — це відстань від точки до лівого краю полотна, Y — відстань від точки до верхнього краю полотна.
8.PNG   Рис.2

Полотно на рис.2 має  ширину 500 пікселів і висоту 500 пікселів, тобто верхньому лівому куту відповідають координати (0, 0), а правому нижньому — (500, 500).
 
Колір полотна — світло-сірий, за бажання можна змінити фон для майбутнього малюнка за допомогою оператора canvas.config(bg = 'blue') # blue замініть назвою потрібного кольору
Методи полотна tkinter
Об’єкт  Canvas має ряд методів, призначених для малювання точок, ліній, прямокутників, кіл, дуг, виведення тексту.
Відрізок. Метод create_line креслить відрізок від точки з координатами (x1, y1) до точки(x2, y2):
canvas.create_line(x1, y1, x2, y2)
Приклад:
Намалювати лінію від верхнього лівого кута полотна до правого нижнього кута.
canvas.create_line(0, 0, 500, 500)
Прямокутник. Метод create_rectangle малює незаповнений прямокутник, протилежні кути якого збігаються з точками (x1, y1) і (x2, y2). Сторони прямокутника паралельні сторонам екрана:
 canvas.create_rectangle (x1, y1, x2, y2) 
Приклад:
Намалювати квадрат із довжиною сторони 100 пікселів:
canvas.create_rectangle (20,30,120,130)
Еліпс. Метод canvas.create_oval малює еліпс, вписаний в прямокутник, який задано координатами двох протилежних вершин x1, y1 і x2, y2 (рис.3):
canvas.create_oval (x1, y1, x2, y2)
3.PNG   Рис.3
Приклад:
Намалювати коло діаметром 100 пікселів.
canvas.create_oval (20, 30, 120, 130);
canvas.create_oval (20, 30, 120, 130, fill='red', outline='blue', width=3)
Багатокутник. Багатокутник — це фігура, що має три і більше вершин і замкнений контур.   Щоб накреслити багатокутник, потрібно указати координати всіх його вершин (рис.4):
canvas.create_polygon(х1,у1, х2, у2, …, xn, yn)
За замовчуванням багатокутник зафарбовується чорним кольором. Якщо потрібно зобразити незафарбований багатокутник, потрібно додати параметри  fill="" (надати параметру  «заливка» порожнє значення) та outline="black" (задати чорний колір контуру).
 
9.PNG   Рис.4
Приклад:
Накреслити незафабований трикутник.
points = [10, 10, 100, 10, 100, 110]
canvas.create_polygon(points,  fill="", outline="black")
Дуга. Дуга — це сегмент кола. Для малювання дуги треба викликати метод create_arc, передавши йому координати вершин прямокутника, до якого вписаний еліпс, частиною якого є дуга (рис.5). Синтаксис виклику:
canvas.create_arc(х1,у1, х2, у2, start, extent, style)
де х1,у1, х2, у2 - координати вершин прямокутника; start – кут, з якого починається дуга; extent – кут розвертання дуги в градусах; style – стиль дуги.
Параметр style може приймати три значення: PIESLICE, CHORD, ARC.
 
5.PNG   Рис.5
 
Зверни увагу!
Відлік кутів ведеться проти годинникової стрілки. На рис.5 зображено дві дуги, для першої параметр extent = 90, для другої – extent = 270.
Приклад:
Намалювати іншопланетянина (рис.6).
from tkinter import *
root = Tk()
canvas = Canvas(root, width=200, height=200)
canvas.pack()
canvas.create_oval (10, 10, 110, 110)   # обличчя
canvas.create_oval (20, 30, 40, 80, fill="black")  # ліве око
canvas.create_oval (80, 30, 100, 80,fill="black")  # праве око
canvas.create_rectangle(50,110, 70, 160) #  тулуб
canvas.create_line(50, 160, 40,180)  # ліва кінцівка
canvas.create_line(70, 160, 80,180)  #  права кінцівка
canvas.create_arc(40,70,80,100,start=200,extent=160, style=ARC)  # посмішка
 
6.PNG   Рис.6
Створення кольорових зображень
Для створення кольорових малюнків слід до переліку параметрів графічних методів додати параметри fill (колір заливки) і outline (колір лінії). Можна також збільшити товщину лінії, задавши значення параметру  width.
Приклад:
Намалювати червоне коло з синім контуром довщиною в 3 піксели:
canvas.create_oval (20, 30, 120, 130, fill='red', outline='blue', width=3)
Приклад:
Заповнити полотно випадковими прямокутниками. Для цього підключимо модуль random і створимо функцію draw_rectangle(), яка креслить прямокутник, координатами якого є випадкові числа. Функція draw_rectangle()  приймає три аргументи: найбільшу ширину (width), найбільшу висоту (height), колір прямокутника (fill_color).
 
Координати лівого верхнього кута x1, у1 набувають випадкових значень в діапазонах (0, width) і (0,height).
 
Координати правого нижнього кута x2, y2 отримуємо додаванням до відповідної координати лівого верхнього кута випадкового числа. Викликаємо метод  canvas.create_rectangle (x1, y1, x2, y2), щоб накреслити прямокутник.  До переліку параметрів функції create_rectangle додамо параметр fill і присвоїмо цьому параметру значення змінної fill_color. З основної програми в циклі for 30 разів викликаємо функцію draw_rectangle(). Програма заповніть полотно кольоровими прямокутниками (рис.7).

def draw_rectangle(width, height,  fill_color):
    x1 = randint(1,width)
    y1 = randint(1,height)
    x2 = x1 + randint(1,width)
    y2 = y1 + randint(1,height)
    canvas.create_rectangle(x1, y1, x2, y2,  fill = fill_color)
c=['red', 'green', 'blue', 'yellow']  # список кольорів
for x in range(0, 30):
    draw_rectangle(200, 200, c[x%4])
 
11.PNG   Рис.7
Виведення зображень з графічних файлів
Для виведення на полотно зображення з графічного файлу потрібно шлях до графічного файла завантажити до змінної за допомогою функції PhotoImage (file = 'шлях до файла') і  викликати метод create_image.
Якщо графічний файл збережено в папку програми, достатньо вказати лише назву файлу. 
Приклад:
Вивести на полотно малюнок picture1.gif, який розташований на диску D:
my_image = PhotoImage(file=' d:\\picture1.gif')
canvas.create_image(0, 0, anchor=NW, image=my_image)
Джерела:
Інформатика : підруч. для 7 кл. закл. загал. серед. освіти / [О. О. Бондаренко, В. В. Ластовецький, О. П. Пилипчук, Є. А. Шестопалов]. — Харків : Вид-во «Ранок», 2020.