Модуль tkinter. Урок №4 — Создание графических примитивов (рисование)
На этом уроке мы научимся использовать виджет Canvas для вывода примитивов 2d-графики.
Как и в большинстве систем программирования, ось Y направлена сверху вниз, начало отсчета (0,0) — левый верхний угол.
В качестве примера построим рисунок, приведенный в начале (домик с антенной, крыльцом и солнышком).
1. Напишем пустой шаблон программы на tkinter:
from tkinter import * root=Tk() root.title('Графические примитивы') # здесь будет будущий код root.mainloop()
2. Создадим холст рисования:
canv=Canvas(root,width=500,height=500,bg="lightblue",cursor="pencil")
root - родительское окно,
width, height - ширина и высота холста,
bg - цвет фона,
cursor - тип курсора.
3. Нарисуем зеленый прямоугольник:
canv.create_rectangle(20,150,300,450,fill="green",outline="black")
20,150 - координаты Х и Y левого верхнего угла прямоугольника,
300,450 - координаты Х и Y правого нижнего угла прямоугольника,
fiil - цвет заливки,
outline - цвет линий (контура).
4. Нарисуем крышу:
Крышу создадим как многоугольник, для этого требуется задать пары координат для каждой его точки:
canv.create_polygon([20,150],[160,30],[300,150],fill="blue",outline="blue")
5. Аналогично построим крыльцо:
canv.create_polygon([300,450],[300,300],[400,300],[400,375],[480,375], [480,450],fill="red",outline="red")
6. Нарисуем солнце как эллипс:
При создании задаются координаты гипотетического прямоугольника, описывающего данный эллипс:
canv.create_oval(400,10,480,80,fill="yellow",outline="yellow")
7. Антенну для приема развлекательных передач нарисуем с помощью трех линий:
canv.create_line(300,150,300,30,width=2,fill="black") canv.create_line(300,30,270,0,width=2,fill="black") canv.create_line(300,30,330,0,width=2,fill="black")
8. На левую сторону крыши добавим приемную антенну спутникового телевидения:
Нам понадобится дуга:
canv.create_arc([20,20], [100,100],start=220,extent=180,style=ARC,outline="darkred",width=2)
В зависимости от значения опции style можно получить сектор (по умолчанию), сегмент (CHORD) или дугу (ARC). Координаты по прежнему задают прямоугольник, в который вписана окружность, из которой «вырезают» сектор, сегмент или дугу. От опций start и extent зависит угол фигуры.
9. Добавим надпись внизу рисунка:
canv.create_text(20,470,text="Домик в деревне",font="Verdana 12", anchor="w",justify=CENTER,fill="darkblue")
Трудность здесь может возникнуть с пониманием опции anchor (якорь). По умолчанию в заданной координате располагается центр текстовой надписи. Чтобы изменить это и, например, разместить по указанной координате левую границу текста, используется якорь со значением w (от англ. west – запад).
Другие значения: n, ne, e, se, s, sw, w, nw. Если букв, задающих сторону привязки две, то вторая определяет вертикальную привязку (вверх или вниз «уйдет» текст от координаты). Свойство justify определяет лишь выравнивание текста относительно себя самого.
10. Разместим холст с рисунком с помощью любого менеджера геометрии:
В нашем случае логично разместить холст с помощью самого простого менеджера pack:
canv.pack()
Практическое задание
Создайте следующие изображения:
Изображения заданий взяты с презентации К.Ю. Полякова и сайта http://younglinux.info/
Подсказка: Для повторяющихся фигур (2 и 3 рисунки) удобно использовать циклы, где меняются координаты.