В этой части изучения Tkinter мы немного порисуем. Рисование в Tkinter реализовано при помощи виджета Canvas. Это функционал высокого уровня, который позволяет создавать графику в Tkinter. Рисование можно использовать для создания графиков статистики, самодельных пользовательских виджетов и даже небольших игр.
Содержание курса
- Создание окна по центру и кнопка выхода в Tkinter
- Разметка виджетов в Tkinter — pack, grid и place
- Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
- Меню, подменю и панель инструментов в Tkinter
- Диалоговые окна в Tkinter — Выбор цвета — Выбор файла
- Рисуем линии, прямоугольники, круг и текст в Tkinter
- Пишем игру змейка на Tkinter
Содержание статьи
- Рисуем линии в Tkinter — create_line()
- Создаем цветные прямоугольники в Tkinter
- Рисуем различные формы в Tkinter
- Вставляем изображение в Canvas
- Меняем шрифт и рисуем текст в Tkinter
Рисуем линии в Tkinter — create_line()
Линия – это примитивный геометрический элемент. На виджете Canvas создать линию можно при помощи метода create_line().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
from tkinter import Tk, Canvas, Frame, BOTH class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Рисуем линии") self.pack(fill=BOTH, expand=1) canvas = Canvas(self) canvas.create_line(15, 25, 200, 25) canvas.create_line(300, 35, 300, 200, dash=(4, 2)) canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85) canvas.pack(fill=BOTH, expand=1) def main(): root = Tk() ex = Example() root.geometry("400x250+300+300") root.mainloop() if __name__ == '__main__': main() |
В примере нашего кода, мы рисуем простые линии в Tkinter.
1 |
canvas.create_line(15, 25, 200, 25) |
Параметрами метода create_line() являются координаты x
и y
, которые обозначают стартовые и конечные точки линии.
1 |
canvas.create_line(300, 35, 300, 200, dash=(4, 2)) |
Мы нарисовали вертикальную линию. Опция dash позволяет создать пунктированную линию. Множества (4, 3) означает:
- 4 — длинна тире или точки в пикселях;
- 2 — пустой промежуток между тире либо точками.
Если указать dash=(1, 1)
то у нас будет линия из точек.
1 |
canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85) |
Метод create_line() может содержать несколько конечных точек, которые будут пресекаться линией. Согласно этому коду мы нарисовали треугольник имея три координата разных точек.
Создаем цветные прямоугольники в Tkinter
Цвет является объектом, который отображает комбинацию Красного, Зеленого и Синего цветов (RGB).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
from tkinter import Tk, Canvas, Frame, BOTH class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Цвета") self.pack(fill=BOTH, expand=1) canvas = Canvas(self) canvas.create_rectangle( 30, 10, 120, 80, outline="#fb0", fill="#fb0" ) canvas.create_rectangle( 150, 10, 240, 80, outline="#f50", fill="#f50" ) canvas.create_rectangle( 270, 10, 370, 80, outline="#05f", fill="#05f" ) canvas.pack(fill=BOTH, expand=1) def main(): root = Tk() ex = Example() root.geometry("400x100+300+300") root.mainloop() if __name__ == '__main__': main() |
В данном примере мы нарисовали прямоугольники и закрасили их разными цветами. Мы ранее работали с выбором цвета в Tkinter используя диалоговое окно цветовой палитры.
1 |
canvas = Canvas(self) |
Мы создали виджет canvas.
1 2 3 4 |
canvas.create_rectangle( 30, 10, 120, 80, outline="#fb0", fill="#fb0" ) |
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
С помощью create_rectangle() мы создаем прямоугольник на холсте. Первыми четырьмя параметрами являются x
и y
координаты двух ограничительных точек: верхней левой и нижней правой. При помощи параметра outline мы можем задать цвет контура прямоугольников. А параметр fill используется для окрашивания всей внутренней области прямоугольника.
Рисуем различные формы в Tkinter
На холсте мы можем нарисовать самые разнообразные формы. На представленном ниже примере показаны некоторые из них.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
from tkinter import Tk, Canvas, Frame, BOTH class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Рисуем формы") self.pack(fill=BOTH, expand=1) canvas = Canvas(self) # Овальная форма. canvas.create_oval( 10, 10, 80, 80, outline="#f11", fill="#1f1", width=2 ) # Овальная форма. canvas.create_oval( 110, 10, 210, 80, outline="#f11", fill="#1f1", width=2 ) # Рисуем прямоугольник. canvas.create_rectangle( 230, 10, 290, 60, outline="#f11", fill="#1f1", width=2 ) # Рисуем дугу. canvas.create_arc( 30, 200, 90, 100, start=0, extent=210, outline="#f11", fill="#1f1", width=2 ) points = [ 150, 100, 200, 120, 240, 180, 210, 200, 150, 150, 100, 200 ] # Рисуем многоугольник. canvas.create_polygon(points, outline='#f11', fill='#1f1', width=2) canvas.pack(fill=BOTH, expand=1) def main(): root = Tk() ex = Example() root.geometry("330x220+300+300") root.mainloop() if __name__ == '__main__': main() |
Мы нарисовали разные формы в окне:
- круг;
- овал;
- прямоугольник;
- дугу и многугольник.
Контур окрашен в красный цвет, фигуры были наполнены зеленым цветом. Ширина контура указана в 2 пикселя.
1 2 3 4 |
canvas.create_oval( 10, 10, 80, 80, outline="red", fill="green", width=2 ) |
Метод create_oval() используется для того, чтобы создать круг в Tkinter. Первые четыре параметра определяют ограничивающие координаты фигуры. Иными словами, это x
и y
координаты верхней левой и правой нижней точек квадрата, в который помещен круг.
1 2 3 4 |
canvas.create_rectangle( 230, 10, 290, 60, outline="#f11", fill="#1f1", width=2 ) |
Мы нарисовали прямоугольник в Tkinter. Координаты снова обозначают ограничительные точки с координатами x
и y
..
1 2 3 4 |
canvas.create_arc( 30, 200, 90, 100, start=0, extent=210, outline="#f11", fill="#1f1", width=2 ) |
С помощью этого кода мы создаем дугу. Дуга является частью круга. Мы указывает ограничительные координаты нашей дуги.
Успейте заказать просмотры на видео в YouTube ДокторСмм по наиболее дешевой цене с большими оптовыми скидками. Кроме того, с заказом Вы сможете получить также персональные условия на приобретение ресурса с возможностью выбора более подходящей для Вашей ситуации скорости поступления просмотров. Торопитесь, скидки действуют ограниченное время!
С помощью параметра start мы устанавливаем угол дуги. Параметр extent указывает на размер угла.
1 2 3 4 5 6 7 8 9 |
points = [ 150, 100, 200, 120, 240, 180, 210, 200, 150, 150, 100, 200 ] canvas.create_polygon( points, outline='red', fill='green', width=2 ) |
Данный код позволяет нам создать многоугольник. У этой фигуры присутствует большое количество углов. Чтобы создать многоугольник в Tkinter, нам нужно задать несколько координат, используя метод create_polygon().
Вставляем изображение в Canvas
В данном примере мы рассмотрим, как вставить изображение в canvas виджете.
В данном примере используется файл изображения tatras.jpg
который нужно сохранить рядом с нами кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from tkinter import Tk, Canvas, Frame, BOTH, NW from PIL import Image, ImageTk class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Изображение в Canvas") self.pack(fill=BOTH, expand=1) self.img = Image.open("tatras.jpg") self.tatras = ImageTk.PhotoImage(self.img) canvas = Canvas( self, width=self.img.size[0]+20, height=self.img.size[1]+20 ) canvas.create_image(10, 10, anchor=NW, image=self.tatras) canvas.pack(fill=BOTH, expand=1) def main(): root = Tk() ex = Example() root.mainloop() if __name__ == '__main__': main() |
В примере продемонстрировано как добавить изображение в Canvas.
1 2 |
self.img = Image.open("tatras.jpg") self.tatras = ImageTk.PhotoImage(self.img) |
Из библиотеки Pillow мы используем модули Image и ImageTk.
1 2 3 4 |
canvas = Canvas( self, width=self.img.size[0]+20, height=self.img.size[1]+20 ) |
Мы создаем виджет Canvas. Учитываем размеры изображения. Холст будет на 20 пикселей шире и на 20 пикселей выше, нежели наше изображение.
1 |
canvas.create_image(10, 10, anchor=NW, image=self.tatras) |
Мы используем метод create_image(), чтобы создать изображение на холсте. Чтобы показать изображение, оно закрепляется в северном и западном направлениях anchor=NW
нашего окна. Параметр image позволяет отобразить изображение.
Меняем шрифт и рисуем текст в Tkinter
В последнем примере мы рассмотрим рисование текста используя виджет Canvas в Tkinter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
from tkinter import Tk, Canvas, Frame, BOTH, W class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Текст и Шрифт в Tkinter") self.pack(fill=BOTH, expand=1) canvas = Canvas(self) canvas.create_text( 20, 30, anchor=W, font="DejavuSansLight", text="Красное солнце сгорает дотла" ) canvas.create_text( 20, 60, anchor=W, font="Arial", text="На пылающий город падает тень" ) canvas.create_text( 20, 130, anchor=W, font="TimesNewRoman", text="Перемен!" ) canvas.create_text( 20, 160, anchor=W, font="ComicSans", text="Требуют наши сердца" ) canvas.create_text( 20, 190, anchor=W, font="FreeSerif", text="Перемен!" ) canvas.create_text( 20, 220, anchor=W, font="LatoThin", text="Требуют наши глаза" ) canvas.pack(fill=BOTH, expand=1) def main(): root = Tk() ex = Example() root.geometry("420x250+300+300") root.mainloop() if __name__ == '__main__': main() |
Мы рисуем слова из песни в нашем окне.
1 2 3 4 |
canvas.create_text( 20, 30, anchor=W, font="DejavuSansLight", text="Красное солнце сгорает дотла" ) |
Первые два параметра – это x
и y
координаты центральной точки текста. Если мы закрепим текстовый объект по направлению запада anchor=W
, текст будет начинаться в этой части окна. Параметр font позволяет нам менять шрифт текста, а параметр text
отображает написанный текст в окне.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»