Модуль tkinter позволяет работать с файлами изображений, которые могут быть выведены на виджетах Label, Text, Button или Canvas. Для этих целей используется конструктор Photoimage(), который создает объект изображения. Достаточно указать ему в качестве аргумента имя нужного файла с изображением в виде file = 'имя-файла'. Можно воспользоваться полезным методом subsample() для уменьшения изображения, указав в качестве аргументов параметры дискретизации по горизонтали и вертикали в виде х=значение и y=значение. Например, указанные значения x=2, y=2 приведут к отбрасыванию каждого второго пиксела, то есть изображение уменьшится наполовину по отношению к оригиналу.

После того как объект изображения создан, его можно добавлять на виджеты Label или Button при помощи указания опции image= в соответствующих конструкторах.

У объектов виджетов Text существует метод image_create(), при помощи которого изображение встраивается в текстовое поле. Данный метод принимает два аргумента: первый — для определения позиции размещения (например, '1.0' указывает первую строку и первый символ), второй — непосредственная ссылка на само изображение в виде опции image=.

Объекты Canvas имеют аналогичный метод create_image(), принимающий тоже два аргумента, только первый из них, отвечающий за расположение, представлен в виде пары координат (x,y), которые определяют точку на холсте (элементе Canvas), куда помещается изображение.

 В классе Photoimage существует и обратный метод zoom(), увеличивающий размер изображения в соответствии с заданными аргументами x и y.

from tkinter import *
import tkinter.messagebox as box
window = Tk() # Конструктор для создания объекта окна
window.title('Пример с изображениями')
img = PhotoImage(file = 'change.png')
label = Label(window, image = img, bg = 'yellow')
#уменьшаем картинку в 2 раза
small_img = PhotoImage.subsample(img, x = 2, y = 2)
btn = Button(window, image = small_img)
txt = Text(window, width = 25, height = 7)
#'1.0' указывает первую строку и первый символ
txt.image_create('1.0', image = small_img)
txt.insert('1.1', 'Python - это класс!')
can = \
Canvas(window, width = 100, height = 100, bg = 'cyan')
can.create_image((50, 50), image = small_img)
can.create_line(0, 0, 100, 100, width = 25, fill = 'yellow')
label.pack(side = TOP)
btn.pack(side = LEFT, padx = 10)
txt.pack(side = LEFT)
can.pack(side = LEFT, padx = 10)
window.mainloop()