Как нарисовать треугольник в python
Блог веб разработки статьи | видеообзоры | исходный код

- Главная /
- PYTHON /
- tkinter python рисование
tkinter python рисование

Всем привет! Сегодня мы с вами познакомимся с элементом canvas который переводится как холст. Именно на данном холсте мы можем производить отрисовку различных фигур и текста. Итак, поехали!
Для того чтобы начать отрисовку в окне необходимо создать элемент canvas.
C помощью виджета canvas у нас создается холст. В него мы передали следующие параметры:
window — главное окно
width, height — ширина и высота холста
bg — заливка холста(gray — серый цвет)
cursor — курсор в фокусе холста(pencil — карандаш)

C помощью метода pack() мы выводим наш холст в главное окно.
Все теперь мы можем переходить к отрисовке. Начнем с простых линий.

Здесь мы создали две прямых линии. Для их создания воспользовались методом create_line() который принимает в себя следующие параметры.
Первые два параметра это координаты x,y первой точки начало отрезка.
Вторые два параметры это координаты x,y второй точки конец отрезка.
width — толщина линии.
fill — заливка, цвет линии(yellow — желтый).
Для того чтобы на холсте нарисовать прямоугольник или квадрат, нужно воспользоваться методом create_rectangle().

C помощью метода create_rectangle()мы нарисовали квадрат. Данный метод принимает в себя следующие параметры:
Первые два параметра координаты левого верхнего угла прямоугольника.
Вторые два параметра координаты правого нижнего угла прямоугольника.
fill — цвет заливки прямоугольника.
outline — цвет рамки прямоугольника.
Теперь переходим к отрисовке эллипсов и кругов.
Для того чтобы нарисовать круг или овал нам достаточно воспользоваться методом create_oval().

В основе отрисовки круга с помощью данного метода лежит отрисовка прямоугольника. То есть по сути мы отрисовываем невидимый квадрат куда может быть помещен в полную высоту и ширину квадрат или овал.
Данный метод принимает собой следующие аргументы:
Первые два аргумента в квадратных скобочках координаты x,y левого верхнего угла квадрата.
Вторые два аргумента в квадратных скобочках координаты x, y правого нижнего угла квадрата.
fill — цвет заливки овала.
Для отрисовки более сложных фигур треугольников, многоугольников, многогранников.
Мы можем воспользоваться методом create_polygon().

Здесь мы нарисовали треугольник. В качестве параметров данный метод принимает пары значений координат точек которые последовательно между собой соединяются прямыми.
Точек в разных координатах можно создавать сколько угодно. В результате можно нарисовать фигуру практически любой сложности. Свойство fill отвечает за цвет заливки фигуры, а outline за ее контур. Заметьте мы указали цвет заливки точно такой же как и цвет холста и в результате у нас получился эффект не закрашенной фигуры.
И напоследок рассмотрим отрисовку текста в canvas.

За отрисовку текста в canvas отвечает метод create_text(). В него передаются следующие параметры:
Первые два параметра координаты x, y расположения текста на холсте.
text — текст который мы хотим нарисовать
font — шрифт и размер текста
justify — выравнивание текста(слева, справа, по центру)
fill — цвет текста
Весь написанный за сегодня код выглядит так:
Отлично! Сегодня мы с вами познакомились с основами рисования canvas библиотеки tkinter.
Если у вас появились какие либо вопросы пишите в группу
или оставляйте их в комментариях к данной статье.
Также у меня есть канал на
где я каждую неделю публикую новые видео посвященные веб разработке. Так что переходите и будем развиваться вместе.
На этом у меня на сегодня все. Желаю вам успехов и удачи! Пока!
Оцените статью:
Статьи
Комментарии
Внимание. Комментарий теперь перед публикацией проходит модерацию
Евгений
Не подскажите как повернуть текст на 90 градусов чтобы подписать ось Y

Запись экрана
Данное расширение позволяет записывать экран и выводит видео в формате webm
Библиотека pygame №1
pygame — это библиотека модулей для языка Python, созданная для разработки 2D игр.
Для того чтобы установить pygame на свой компьютер необходимо открыть командную строку или терминал и написать команду
pip3 install pygame
После установки необходимо создать новый файл и импортировать модуль pygame и написать шаблон игры
# Импортируем библиотеку pygame
import pygame
# Импортируем системную функцию exit
from sys import exit
# Инициализируем pygame
pygame. init ()
# Создаем окошко 800 пикселей шириной
# и 600 пикселей высотой и записываем его
# в переменную display.
# Переменную display называют поверхностью.
display = pygame.display. set_mode ( ( 800 , 600 ) )
# Основной цикл игры
while True :
# Ждем события (действия пользователя)
f or event in pygame.event. get ():
# Если нажали на крестик,
# то закрываем окно
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
# Обновляем поверхность игры
# на каждом шаге основного цикла игры
pygame.display. update ()
Пользователь может взаимодействовать с нашей игрой. Каждое действие пользователя — это некоторое событие , которое мы можем обработать . Выражение pygame.event.get() — это список событий, произошедших в нашей игре.
Цикл for просто перебирает необработанные события. Каждое событие он присваивает переменной event (можно написать любую другую).
Поговорим о цикле while , основном цикле игры . Как часто он выполняется? Очень и очень часто, это зависит от мощности компьютера. Для обновления экрана в играх часто используют 60 кадров в секунду.
Ограничим количество выполнений цикла.
import pygame
from sys import exit
display = pygame.display. set_mode ( ( 800 , 600 ) )
FPS = 60 # Создаем переменную FPS
clock = pg.time. Clock () # Создаем счетчик для FPS
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
clock. tick (FPS) # Замедляем цикл до 60 выполнений в секунду
Методу tick() передается желаемое количество кадров в секунду. Задержку он вычисляет сам. На каждой итерации основного цикла игры секунда делится на 60 и на вычисленную величину выполняется задержка.
Рисование фигур
В библиотеке pygame существует множество функций для рисования различных фигур.
Функция polygon() рисует произвольную фигуру. Она принимает 3 обязательных параметра (поверхность, цвет и кортеж координат) и 1 необязательный (толщину линий).
import pygame
from sys import exit
display = pygame.display. set_mode ( ( 800 , 600 ) )
# Рисуем полигон (да, получится квадратик)
pygame.draw. polygon ( display, ( 255 , 0 , 0 ) , ( ( 0 , 0 ), ( 100 , 0 ), ( 100 , 100 ), ( 0 , 100 ) ) )
FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
display — наша поверхность
(255, 0, 0) — красный цвет , почитайте про rgb
( (0, 0), (100, 0), (100, 100), (0, 100) ) — координаты вершин квадрата. Возьмите листочек и нарисуйте его координатах (замените сотню на единицу).
Давайте нарисуем треугольник
import pygame
from sys import exit
display = pygame.display. set_mode ( ( 800 , 600 ) )
# Рисуем квадратик
pygame.draw. polygon ( display, ( 255 , 0 , 0 ) , ( ( 0 , 0 ), ( 100 , 0 ), ( 100 , 100 ), ( 0 , 100 ) ) )
# Рисуем синий треугольник
pygame.draw. polygon ( display, ( 0 , 0 , 255 ) , ( ( 100 , 100 ), ( 200 , 200 ), ( 100 , 200 ) ) )
FPS = 60 # Создаем переменную FPS
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
(0, 0, 255) — синий цвет
((100, 100), (200, 200), (100, 200)) — координаты вершин нашего треугольник.
Самостоятельно нарисуйте пятиугольник (вам помогут карандаш и лист бумаги)
Рисование окружностей
Чтобы нарисовать окружность нужно вызвать метод circle из модуля draw. Команда выглядит так: pygame.draw.circle(display, color, position, radius).
display — поверхность, на которой рисуем
color — цвет, записанный в кортеже из трех чисел. (еще раз про rgb)
position — координаты точки центра окружности ( кортеж из двух чисел (x, y) )
radius — радиус окружности в пикселях
import pygame
from sys import exit
display = pygame.display. set_mode ( ( 800 , 600 ) )
# Рисуем квадратик
pygame.draw. polygon ( display, ( 255 , 0 , 0 ) , ( ( 0 , 0 ), ( 100 , 0 ), ( 100 , 100 ), ( 0 , 100 ) ) )
# Рисуем синию линию
pygame.draw. polygon ( display, ( 0 , 0 , 255 ) , ( ( 100 , 100 ), ( 200 , 200 ), ( 100 , 200 ) ) )
# Рисуем желтую окружность с радиусом 100 пикселей
pygame.draw. circle ( display, ( 255 , 255 , 0 ) , ( 400 , 200 ), 100 )
FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
display — наша поверхнотсть для рисования
(255, 255, 0) — желтый цвет
(400, 200) — координаты точки центра (в нашем случае 400 пикселей от верхнего левого угла по горизонтали и 200 пикселей по вертикали)
100 — радиус нашей окружности в пикселях
Объявления переменных для цветов
Для нашего с вами удобства давайте объявим несколько переменных, в которые сохраним используемые нами цвета
import pygame
from sys import exit
WHITE = ( 255 , 255 , 255 )
BLACK = ( 0 , 0 , 0 )
PURPLE = ( 156 , 39 , 176 )
INDIGO = ( 63 , 81 , 181 )
BLUE = ( 33 , 150 , 243 )
GREEN = ( 76 , 175 , 80 )
YELLOW = ( 255 , 235 , 59 )
ORANGE = ( 255 , 152 , 0 )
GREY = ( 158 , 158 , 158 )
display = pygame.display. set_mode ( ( 800 , 600 ) )
# Рисуем квадратик
pygame.draw. polygon ( display, ( 255 , 0 , 0 ) , ( ( 0 , 0 ), ( 100 , 0 ), ( 100 , 100 ), ( 0 , 100 ) ) )
# Рисуем синию линию
pygame.draw. polygon ( display, ( 0 , 0 , 255 ) , ( ( 100 , 100 ), ( 200 , 200 ), ( 100 , 200 ) ) )
# Рисуем желтую окружность с радиусом 100 пикселей
pygame.draw. circle ( display, ( 255 , 255 , 0 ) , ( 400 , 200 ), 100 )
FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
Рисование прямоугольников
Для отрисовки прямоугольников можно использовать метод rect.
pygame.draw.rect(display, color, (x, y, width, height) )
color — цвет (теперь можно просто написать имя переменную)
(x, y, width, height) — кортеж из четырех значений. Первые два значения — это координаты верхнего левого угла прямоугольника, а два последних — это ширина и высота.
import pygame
from sys import exit
WHITE = ( 255 , 255 , 255 )
BLACK = ( 0 , 0 , 0 )
PURPLE = ( 156 , 39 , 176 )
INDIGO = ( 63 , 81 , 181 )
BLUE = ( 33 , 150 , 243 )
GREEN = ( 76 , 175 , 80 )
YELLOW = ( 255 , 235 , 59 )
ORANGE = ( 255 , 152 , 0 )
GREY = ( 158 , 158 , 158 )
display = pygame.display. set_mode ( ( 800 , 600 ) )
# Рисуем квадратик
pygame.draw. polygon ( display, ( 255 , 0 , 0 ) , ( ( 0 , 0 ), ( 100 , 0 ), ( 100 , 100 ), ( 0 , 100 ) ) )
# Рисуем синию линию
pygame.draw. polygon ( display, ( 0 , 0 , 255 ) , ( ( 100 , 100 ), ( 200 , 200 ), ( 100 , 200 ) ) )
# Рисуем желтую окружность с радиусом 100 пикселей
pygame.draw. circle ( display, ( 255 , 255 , 0 ) , ( 400 , 200 ), 100 )
# Рисуем фиолетовый прямоугольник 200х300
pygame.draw. rect ( display, PURPLE , ( 600 , 300 , 200 , 300 ))
FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()
Если ваша творческая натура требует большего, то вот ссылка на документацию модулю draw
Там можно найти рисование линий, дуг, эллипсов.
Большой пример ( запусти его у себя на компьтере:
import pygame
from sys import exit
from random import randint
# Функция, возвращающая случайный оттенок зеленого цвета
def randomGreen ():
return randint ( 0 , 100 ), randint ( 100 , 255 ), randint ( 0 , 100 )
# Функция, возвращающая случайный оттенок красного цвета
def randomRed ():
return randint ( 100 , 255 ), randint ( 0 , 100 ), randint ( 0 , 100 )
Canvas
Виджет Canvas предоставляет возможности рисования двухмерных фигур. Стоит отметить, что Canvas есть только в пакете tkinter , а в пакете tkinter.ttk аналог отсутствует.
Некоторые основные параметры Canvas:
bg / background : фоновый цвет
bd / border : граница
borderwidth : толщина границы
height : высота виджета
width : ширина виджета
По умолчанию Canvas представляет прямоугольную область:

Для двухмерного рисования Canvas предоставляет ряд методов:
create_line() : рисует линию
create_rectangle() : рисует прямоугольник
create_oval() : рисует овал
create_arc() : рисует дугу
create_polygon() : рисует многоугольник
create_text() : добавляет текст
create_image() : добавляет изображение
create_window() : добавляет виджет
В качестве результата все эти методы возвращают идентифтикатор добавленного элемента. Этот идентификатор в дальнейшем может использоваться для управления элементом. Рассмотрим применение этих методов.
Создание линии
Для рисования линии применяется метод create_line() . Для вывода линии необходимо как минимум задать координаты точек, например:
Параметры __x0 и __y0 представляют координаты начальной точки линии, а __x1 и __y1 — конечной.
Началом координат в Canvas считается верхней левый угол виджета — это точка с координатами (0,0). Таким образом, ось X направлена вправо, а ось Y — вниз.
Нарисуем простейшую линию:

Кроме того у данного метода можно выделить ряд дополнительных параметров:
arrow : помещает стрелку в начале линии (значение first), в конце (last) или на обоих концах (both)
arrowshape : позволяет изменить форму стрелки
capstyle : если линия не имеет стрелки, то устанавливает, как завершается линия. Принимает значения: butt (по умолчанию), projecting и round
joinstyle : управляет соединением сегметов линии. Принимает значения: round (по умолчанию), bevel и miter
smooth : если значение «true» или «bezier», сглаживает сегменты линии
splinesteps : управляет сглаживанием изогнутых линий
Параметры отрисовки
Методы отрисовки имеют ряд параметров, которые позволяют настроить стилизацию фигур. Некоторые из этих параметров:
fill : цвет заполнения фигуры
width : ширина линий
outline : для заполненных фигур цвет контура
dash : устанавливает пунктирную линию
stipple : устанавливает шаблон для заполнения фигуры (например, gray75, gray50, gray25, gray12)
activefill : цвет заполнения фигуры при наведении курсора
activewidth : ширина линий при наведении курсора
activestipple : шаблон заполнения фигуры при наведении курсора
Применим некоторые параметры:
В данном случае нарисованы две параллельные линии пунктиром синим цветом. При наведении на них указателя мыши, они окрашиваются в красный цвет.

Создание прямоугольника
Для отрисовки прямоугольника применяется метод create_rectangle() , которому обязательно передаются координаты верхнего левого и правого нижнего угла:

Отрисовка овала
Для отрисовки овала применяется метод create_oval() . В качестве обязательных параметров он принимает координаты прямоугольника, в который будет вписан овал. :
Пример использования метода:
Для наглядности здесь также отрисован прямоугольник, чтобы было видно как вписывается овал:

Отрисовка многоугольника
Для создания многоугольника применяется метод create_polygon() . Он принимает в качестве обязательных параметров набор координатов точек:
В данном случае передаются координаты трех точек, которые в итоге станут вершинами треугольника

Для упрощения также можно передавать набор кортежей, где каждый кортеж представляет отдельную точку:
Отрисовка дуги
Для отрисовки дуги применяется метод create_arc() , который принимает набор точек:

Отображение текста
Для вывода текста применяется метод create_text() . Ключевыми его параметрами являются координаты точки вывода текста, а также параметр text — сам выводимый текст:
При выводе текста стоит учитывать, что по умолчанию указанные координаты представляют центральную точку вывода текста. Но это поведение можно изменить с помощью опции anchor .
Здесь два раза выводится один и тот же текст. И в обоих случаях совпадает X-координата. Но во втором случае установлен параметр anchor : его значение «NW» указывает, что координаты будут представлять верхний левый угол прямогольной области, в которой выводится текст

С помощью параметра font можно задать шрифт, в том числе его высоту:
Вывод изображения
Для вывода изображения применяется метод create_image() , который в качестве обязательно параметра принимает координаты изображения. Для установки самого изображения в метод через параметр image передается ссылка на изображение:
В данном случае координаты представлены точкой с x=10 и y=10, а изображение представляет объект PhotoImage (здесь предполагается, что в одной папке с файлом программы находится файл «python.png»). Но как и в случае с выводом текста, следует учитывать, что по умолчанию координаты представляют центр изображения. Чтобы настроить положение изображения относительно координат, применяется параметр anchor . Так, в данном случае значение «NW» означает, что координата представляет верхний левый угол изображения.

Добавление виджетов
Одной из замечательных особенностей Canvas является то, что он позволяет добавлять другие виджеты и таким образом создавать сложные по композиции интерфейсы. Для этого применяется метод create_window() .
_x и _y или __coords : координаты точки размещения виджета. По умолчанию представляет центр виджета
_anchor : устанавливает положение виджета относительно координат
height : высота виджета
width : ширина виджета
state : состояние виджета
tags : набор тегов, связанных с виджетом
В качестве результата этот метод возвращает идентификатор добавленного метода.
Например, добавим кнопку:
В данном случае верхний левый угол кнопки будет иметь координаты (x=10, y=20), а сама кнопка имеет ширину 100 и высоту 50 единиц. Если ширина и высота явным образом не указаны, то они имеют значения по умолчанию.

Создание прокрутки
Для создания прокрутки виджет Canvas предоставляет параметр , который позволяет установить прокручиваемую область:
How to Draw a Triangle in Python Turtle
Python has a simple pen drawing library called turtle. Using simple movement commands, we can draw shapes using the python turtle library. When teaching python to children, turtle is a good library to introduce to get children excited about the language and its features.
The basic actions used in the following examples are,
- Draw a line with pen — forward() command
- Move without drawing — penup(), pendown() commands
- Turn the pen to an angle — left(), right() commands
The following python program draws a simple equilateral triangle,
The following python program draws a right angled triangle,
The following python program draws a star shape by drawing two identical isosceles triangles,