Рисование закрашенного прямоугольника в turtle python
Напишем процедуру для рисования закрашенного прямоугольника в turtle на Python с заданными координатами верхнего левого угла, шириной, высотой и цветом заливки.
Подробнее о процедурах в python
Назовём процедуру rectangle и передадим параметры в процедуру.
x, y — координаты левого верхнего угла
width, height — ширина и высота прямоугольника
color — цвет заливки прямоугольника
def rectangle(x,y,width,height,color):
Чтобы перейти в левый верхний угол прямоугольника, поднимаем перо черепашки
t.up()
Переходим в левый верхний угол прямоугольника
t.goto(x,y)
Чтобы начать рисование, нужно опустить перо черепашки
t.down()
Поставим чёрный цвет заливки по умолчанию
t.fillcolor(«black»)
Далее выставляем цвет заливки, исходя из значений параметра color. Для примера мы рассмотрели три цвета Для этого с помощью условия if проверяем значение color и выставляем соответствующий цвет.
Приложение для рисования Где рисовать на телефоне
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
Начинаем заливку перед рисованием прямоугольника
t.begin_fill()
Рисуем верхнюю грань прямоугольника, сдвинувшись вперёд на заданное значение ширины.
t.fd(width)
Поворачиваем вправо на 90 градусов
t.right(90)
Рисуем правую грань прямоугольника, сдвинувшись черепашкой вниз на заданное значение высоты
t.fd(height)
Разворачиваемся черепашкой вправо на 90 градусов
t.fd(height)
Рисуем нижнюю грань прямоугольника
t.fd(width)
Поворачиваем вправо на 90 градусов
t.right(90)
Рисуем левую грань прямоугольника
t.fd(height)
Заканчиваем заливку после того, как нарисовали прямоугольник
t.end_fill()
Разворачиваем черепашку вправо на 90 градусов, возвращая её в исходное положение
t.right(90)
Полностью процедура для рисования закрашенного прямоугольника в Python будет выглядеть следующим образом:
def rectangle(x,y,width,height,color):
t.up()
t.goto(x,y)
t.down()
t.fillcolor(«black»)
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
if (color==4):
t.fillcolor(«blue»)
t.begin_fill()
t.fd(width)
t.right(90)
t.fd(height)
t.right(90)
t.fd(width)
t.right(90)
t.fd(height)
t.end_fill()
t.right(90)
Вы можете использовать эту готовую процедуру для рисования прямоугольника в Python в своих программах
Для примера мы напишем программу, которая рисует пирамидку из разных цветов
Полный код программы для рисования разноцветной пирамиды на Python с помощью черепашки
from turtle import *
t = Turtle()
t.screen.setup(800, 800)
def rectangle(x,y,width,height,color):
t.up()
t.goto(x,y)
t.down()
t.fillcolor(«black»)
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
if (color==4):
t.fillcolor(«blue»)
t.begin_fill()
t.fd(width)
t.right(90)
t.fd(height)
t.right(90)
t.fd(width)
t.right(90)
t.fd(height)
t.end_fill()
t.right(90)
rectangle(0,100,200,40,1)
rectangle(30,140,140,40,2)
rectangle(50,180,100,40,3)
t.screen.exitonclick()
t.screen.mainloop()
Рисование закрашенного круга turtle Python
Напишем процедуру для рисования закрашенного круга на turtle Python.
В процедуру передаем следующие параметры:
x,y — координаты центра окружности
r — радиус окружности
color — цвет заливки окружности
def circle(x,y,r,color):
Чтобы перейти к центру окружности в черепашке на Python, необходимо выполнить следующие команды:
t.up()
t.goto(x,y-r)
t.down()
Черепашка при рисовании окружности начинает рисовать с самой нижней расположенной точки окружности, поэтому необходимо поднять её на радиус
Ставим чёрный цвет для закраски фигуры по умолчанию
t.fillcolor(«black»)
Присваиваем цвет заливки, исходя из значений задаваемого параметра color.
Используем условие if, чтобы проверить значение color и установить цвет закраски круга.
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
Начинаем закраску перед рисованием круга
t.begin_fill()
Чтобы нарисовать круг, используем оператор t.circle из модуля черепашка turtle python
t.circle(r,360)
Заканчиваем закраску
t.end_fill()
Полностью процедура для рисования закрашенного круга на turtle Python выглядит таким образом. Вы можете использовать эту готовую процедуру в своих программах.
def circle(x,y,r,color):
t.up()
t.goto(x,y-r)
t.down()
t.fillcolor(«black»)
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
if (color==4):
t.fillcolor(«blue»)
t.begin_fill()
t.circle(r,360)
t.end_fill()
В качестве примера напишем программу, которая нарисует светофор, у которого по порядку будут загораться цвета. Пока горит нужный цвет, остальные цвета чёрные.
В теле программы мы рисуем закрашенные круги. Для того, чтобы между сменой цветов была пауза, используем оператор sleep. Для использования оператора sleep нужно импортировать модуль time
Полный код программы для рисования светофора на Python
from turtle import *
import time
t = Turtle()
t.screen.setup(800, 800)
def circle(x,y,r,color):
t.up()
t.goto(x,y-r)
t.down()
t.fillcolor(«black»)
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
if (color==4):
t.fillcolor(«blue»)
t.begin_fill()
t.circle(r,360)
t.end_fill()
circle(50,150,25,0)
circle(50,100,25,0)
circle(50,50,25,3)
time.sleep(1)
circle(50,150,25,0)
circle(50,100,25,2)
circle(50,50,25,0)
time.sleep(1)
circle(50,150,25,1)
circle(50,100,25,0)
circle(50,50,25,0)
t.screen.exitonclick()
t.screen.mainloop()
Рисование закрашенного треугольника turtle Python
Напишем процедуру для рисования закрашенного треугольника на Python.
В процедуру передаются следующие параметры:
x1,y1,x2,y2,x3,y3 — координаты вершин треугольника
color — цвет закраски треугольника
def triangle(x1,y1,x2,y2,x3,y3,color):
Переходим в первую вершину треугольника
t.up()
t.goto(x1,y1)
t.down()
Ставим чёрный цвет закраски по умолчанию
t.fillcolor(«black»)
При помощи условия if проверяем значение color и устанавливаем цвет закраски
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
Начинаем закраску
t.begin_fill()
Переходим ко второй вершине, потом к третьей и возвращаемся в первую, отрисовывая грани треугольника
t.goto(x2,y2)
t.goto(x3,y3)
t.goto(x1,y1)
Заканчиваем заливку
t.end_fill()
Полностью процедура для рисования закрашенного треугольника на turtle Python выглядит таким образом. Эту процедуру вы можете использовать в своих программах.
def triangle(x1,y1,x2,y2,x3,y3,color):
t.up()
t.goto(x1,y1)
t.down()
t.fillcolor(«black»)
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
t.begin_fill()
t.goto(x2,y2)
t.goto(x3,y3)
t.goto(x1,y1)
t.end_fill()
Для примера напишем программу, которая нарисует ёлочку из трёх треугольников разного цвета на Python
В основном теле программы мы рисуем закрашенные треугольники.
Полный код программы для рисования ёлочки из трёх закрашенных треугольников turtle Python
from turtle import *
t = Turtle()
t.screen.setup(500, 500)
def triangle(x1,y1,x2,y2,x3,y3,color):
t.up()
t.goto(x1,y1)
t.down()
t.fillcolor(«black»)
if (color==1):
t.fillcolor(«red»)
if (color==2):
t.fillcolor(«yellow»)
if (color==3):
t.fillcolor(«green»)
t.begin_fill()
t.goto(x2,y2)
t.goto(x3,y3)
t.goto(x1,y1)
t.end_fill()
triangle(10,80,50,130,100,80,1)
triangle(10,30,50,80,100,30,2)
triangle(10,-20,50,30,100,-20,3)
t.screen.exitonclick()
t.screen.mainloop()
Источник: itrobo.ru
Как написать программу для рисования
Введение в Python
- Python — Обзор
- Основы синтаксиса Python
- Операторы в Python
- Типы данных в Python
- Условные конструкторы в Python
- Циклы в Python
- Функции в Python
- Функциональное программирование в Python
- ООП в Python
- Модули в Python
- Работа с файлами в Python
- Обработка исключительных ситуаций в Python
В данной статье мы напишем простенькую рисовалку на Python. На этом примере мы потренируемся в создании GUI, использовании макетов компоновки в tkinter, передаче дополнительных аргументов в функцию-обработчик нажатия кнопки и использовании lambda-функции в Python.
Для этого примера удобнее будет использовать классовый подход к созданию GUI. Для начала определим класс Paint:
from tkinter import * class Paint(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent def main(): root = Tk() root.geometry(«1920×1080+300+300») app = Paint(root) root.mainloop() if __name__ == «__main__»: main()
Запустив этот код вы должны получить простенькое окно, с которым мы будем работать дальше.
Теперь напишем для класса Paint метод setUI, в котором будет задаваться расположение всех кнопок, меток и самого поля для рисования. У нас будет два ряда кнопок, первый ряд с кнопками устанавливающими цвет, второй ряд устанавливает размер кисти для рисования. Под ними будет идти поле для рисования.
Это достаточно объемный метод, однако многие строки повторяются, так что наберитесь терпения:
def setUI(self): self.parent.title(«Pythonicway PyPaint») # Устанавливаем название окна self.pack(fill=BOTH, expand=1) # Размещаем активные элементы на родительском окне self.columnconfigure(6, weight=1) # Даем седьмому столбцу возможность растягиваться, благодаря чему кнопки не будут разъезжаться при ресайзе self.rowconfigure(2, weight=1) # То же самое для третьего ряда self.canv = Canvas(self, bg=»white») # Создаем поле для рисования, устанавливаем белый фон self.canv.grid(row=2, column=0, columnspan=7, padx=5, pady=5, sticky=E+W+S+N) # Прикрепляем канвас методом grid. Он будет находится в 3м ряду, первой колонке, и будет занимать 7 колонок, задаем отступы по X и Y в 5 пикселей, и заставляем растягиваться при растягивании всего окна color_lab = Label(self, text=»Color: «) # Создаем метку для кнопок изменения цвета кисти color_lab.grid(row=0, column=0, padx=6) # Устанавливаем созданную метку в первый ряд и первую колонку, задаем горизонтальный отступ в 6 пикселей red_btn = Button(self, text=»Red», width=10) # Создание кнопки: Установка текста кнопки, задание ширины кнопки (10 символов) red_btn.grid(row=0, column=1) # Устанавливаем кнопку первый ряд, вторая колонка # Создание остальных кнопок повторяет ту же логику, что и создание # кнопки установки красного цвета, отличаются лишь аргументы. green_btn = Button(self, text=»Green», width=10) green_btn.grid(row=0, column=2) blue_btn = Button(self, text=»Blue», width=10) blue_btn.grid(row=0, column=3) black_btn = Button(self, text=»Black», width=10) black_btn.grid(row=0, column=4) white_btn = Button(self, text=»White», width=10) white_btn.grid(row=0, column=5) size_lab = Label(self, text=»Brush size: «) # Создаем метку для кнопок изменения размера кисти size_lab.grid(row=1, column=0, padx=5) one_btn = Button(self, text=»Two», width=10) one_btn.grid(row=1, column=1) two_btn = Button(self, text=»Five», width=10) two_btn.grid(row=1, column=2) five_btn = Button(self, text=»Seven», width=10) five_btn.grid(row=1, column=3) seven_btn = Button(self, text=»Ten», width=10) seven_btn.grid(row=1, column=4) ten_btn = Button(self, text=»Twenty», width=10) ten_btn.grid(row=1, column=5) twenty_btn = Button(self, text=»Fifty», width=10) twenty_btn.grid(row=1, column=6, sticky=W)
Не забудьте добавить вызов этого метода в __init__, чтобы все работало.
self.setUI()
Если вы сделали все верно, то при запуске всего кода вы увидите следующее окно:
Теперь создадим метод рисования на холсте. Для начала создадим переменные класса устанавливающие размер и цвет кисти, в метод __init__ допишите:
self.brush_size = 10 self.brush_color = «black»
Сам метод рисования будет выглядеть следующим образом:
def draw(self, event): self.canv.create_oval(event.x — self.brush_size, event.y — self.brush_size, event.x + self.brush_size, event.y + self.brush_size, fill=self.color, outline=self.color)
Рисование осуществляется путем создания кругов на холсте: пользователь зажимает левую кнопку мыши и при движении мышью, по пути следования курсора будут отрисовываться круги. Метод draw принимает аргумент event, на основе которого мы будем формировать овалы.
Метод create_oval класса Canvas получает четыре координаты, на основе которых создается квадрат, в который вписывается круг. В качестве этих координат мы передаем позицию курсора, поэтому первая координата по оси икс будет позиция курсора минус размер кисти, вторая координата по оси икс — позиция курсора плюс размер кисти, то же самое для оси игрек. Это может показаться сложным, но скоро вы запустите наше приложение и увидите все своими глазами.
Осталось только привязать к канвасу обработку только что созданного метода. Добавьте следую строку после прикрепления канваса (self.canvas.grid. )
self.canv.bind(«», self.draw)
означает «при движении зажатой левой кнопки мыши» вызывать метод draw. Теперь мы можем рисовать!
Уже выглядит неплохо. Добавим возможность изменять цвет кисти, заставим кнопки верхнего ряда работать. Для этого сначала создадим метод изменения цвета кисти:
def set_color(self, new_color): self.color = new_color
После этого в каждой кнопке верхнего ряда следует добавить код обработки нажатия этой кнопки по следующему шаблону:
red_btn = Button(self, text=»Red», width=10, command=lambda: self.set_color(«red»)) red_btn.grid(row=0, column=1)
Код который мы добавили — command = lambda: self.set_color(«red»), привязывает функцию с нужным нам аргументом к кнопке. Мы используем lambda-функцию потому-что, без lambda функция вызовется сразу при создании кнопки, а не только при ее нажатии. (Можете попробовать такую строку command = self.set_color(«red») и цвет сразу установится на красный). Добавив этот код с нужными аргументами (а это «green», «blue», «black», «white») ко всем кнопкам получим возможность изменять цвет кисти:
Теперь добавим метод изменения размера кисти:
def set_brush_size(self, new_size): self.brush_size = new_size
И модернизируем код каждой кнопки нижнего ряда по следующему шаблону:
one_btn = Button(self, text=»Two», width=10, command=lambda: self.set_brush_size(2))
Логика работы этих кнопок та же, что и у кнопок изменения цвета кисти. Получаем следующий результат:
На этом практически все, осталось добавить функционал очистки холста. Мы оставили место в верхнем ряду кнопок, его и заполним. Добавьте следующий код в наш метод setUI:
clear_btn = Button(self, text=»Clear all», width=10, command=lambda: self.canv.delete(«all»)) clear_btn.grid(row=0, column=6, sticky=W)
Для очистки холста мы используем метод delete класса Canvas, чтобы удалить все с холста в качестве аргумента методу delete мы передаем «all». Вот и все, у нас есть примитивный Paint.
P.S.: Запустив данное приложение, вы заметите, что если провести мышкой быстро, то линии у нас получаются прерывчастыми. Это вызвано тем, что движение происходит быстрее, чем завершается очередной цикл root.mainloop, соответственно все, что попадает «между» итерациями цикла пропадает. Решение этой проблемы само по себе достаточно интересное задание, однако оно требует намного более сложного кода.
P.P.S: Исходный код проекта на GitHub
- Пятнашки на Python
- Паттерны проектирования в Python
- Множествeнное наследование в Python
- Абстрактные классы в Python
- Сапер на Python
Источник: www.pythonicway.com
Рисование на Python. Как написать картину на клавиатуре?
Вы любите рисовать? А хотели бы научится программировать на Python? Или уже научились выводить «Hello, world» через итератор в Wing IDE)? Сегодня, прочитав эту статью, вы научитесь писать картины силой кода, вернувшись к истокам виртуального рисования. Так давайте же начнем!
С чего начать? Для удачного старта вам потребуются хотя бы минимальные знания о программировании на языке Python. Вы должны знать о итераторах и итерируемых объектах, о типах данных в Python, о функциях и о том как с ними работать (а еще желательно немного знать английский). Это позволит вам глубже понимать код и писать свои, независимые программы.
Не отчаивайтесь, если вы не имеете этих знаний. Вы с легкостью поймете, то о чем будет идти речь в этой статье и, возможно, даже сможете написать свою небольшую программку, прочитав ее до конца.
Где работать? Самой лучшей программой для написания кодов на Python я считаю PyCharm. Почему? Во-перых удобный интерфейс, во-вторых частые обновления и в-третьих широкая поддержка на разных ОС. Скачать его можно на официальном сайте совершенно бесплатно.
Выбираем версию Community (покупать Professional версию в данном случае нет необходимости). После того, как вы его открыли, создаете новый проект (Create New Project), давая ему говорящее название, а после создаете новый файл уже в проекте(File->New->Python file->пишем название своего кода->Create), где будете писать саму программу (файлу тоже желательно дать правильное название).
После открытия приложения, вам потребуется создать проект.
При создании проекта вы должны указать где будет находиться проект с вашим кодом и как будет называться проект. (1 — место/название проекта, 2 — только местонахождение проекта.) После того, как вы все определили — нажимаем Create.
Изучите PyCharm подробнее, чтобы работать было легче и удобнее. Попробуйте установить темную тему и поэкспериментировать с сочетаниями клавиш во время работы.
Библиотеки для работы с графическими файлами. Чтобы написать рисунок на Python нам потребуются библиотеки, которые используются для работы с графическими файлами.
Библиотека — это.
Если говорить простым языком, то библиотека — это специализированный код, который можно использовать для работы других программ, правильно импортируя и вызывая библиотеку. Аналогию можно провести с телом человека — где, допустим, нервная система — это ваш код, то есть каркас программы, а остальные системы, то есть кровеносная, пищеварительная, дыхательная, выделительная — это библиотеки, органично (более точного слова и не подобрать)) дополняющие каркас. Только стоит понимать, что если отключится нервная система, каркас биологической программы — то организм полностью умрет, в то время как библиотеки — это лишь модули и могут спокойно существовать сами по себе без вашей «склейки» (вашего авторского кода).
Есть много библиотек ДРСГФ, но мы будем использовать библиотеку Pillow или, как ее импортируют, PIL. Это первая библиотека, которую обычно осваивают питонисты при работе с ГФ.
Где и как скачать библиотеку? Это проще, чем может показаться в первый раз. (В открытом, готовом к работе приложении) File -> Settings -> Project:(name) -> Project Interpreter -> нажимаем на плюс -> в поисковой строке, которая появиться вбиваем «Pillow»-> скачиваем. При каких либо ошибках попробуйте обновить библиотеки, которые были скачены по умолчанию до последней версии(это можно сделать в пункте Project Interpreter в предпочтениях(Preferences)).
File->Settings или просто Ctrl+Alt+S. PyCharm темная тема).
(видео взято с авторского (моего) канала)
Приступим!
Первое, что нужно сделать — вызвать библиотеку. Это делается простой строчкой:
from PIL import Image
Этой короткой строкой вызывается библиотека PIL, с помощью которой и воспроизводится рисование, и берется объект Image, который находиться в этой библиотеке. Он будет служить в роли холста. Но его не достаточно. Также нужен объект Draw из модуля PIL.ImageDraw. Ведь у него есть инструменты для рисования (линии, круги, треугольники, четырехугольники). Поэтому следует дописать:
from PIL import Image , ImageDraw
Отлично! Все, что нужно для написании картины, удачно импортировано. Осталось только понять саму механику рисования, правильно пользуясь модулями библиотеки PIL.
Создание изображения (настройка холста). Чтобы настроить, создать холст понадобиться только функция Image.new, которая использует объект Image. Создаем переменную, куда положим функцию вместе с двумя кортежами, которые будут отражать размер и цвет холста.
canvas = Image.new(«RGB», (1000, 1000), (255, 0, 0))
Холст размером 1000х1000 пикселей ярко красного цвета создан. Как вы уже могли понять — первый кортеж определяет размер, второй — цвет в формате R, G, B (красный, зеленый, синий), где (255, 255, 255) — белый(то есть максимальный). Если не указать последний кортеж(заливку изображения), то холст по умолчанию будет черным(0, 0, 0).
Делаем из изображения холст. Я немного приврал, когда ранее созданное простое изображение называл холстом. Сейчас это просто одноцветная картинка. Только когда будет указано, что мы на ней рисуем, использовав второй импортированный модуль (PIL.ImageDraw), будет оправданно сравнение с холстом. Это делается следующей строкой:
paint_brush = ImageDraw.Draw(canvas)
Создаем переменную paint_brush (кисть_для_рисования(проведение аналогий)), в которую кладем объект модуля с указанием переменной, которая ранее была просто картинкой. Теперь на ней можно рисовать!
Как нарисовать линию? Переходим к самому сладкому, вкусному и простому. Для того, чтобы написать линию, потребуется функция line, которая, как не сложно догадаться, рисует линии. Функции передаем: начальные координаты, конечные координаты, цвет и ширину самой линии.
paint_brush . line((0, 0, 1000, 1000), fill=(255, 0, 255), width=10)
Т.е. указываем «кисточку», то, что она рисует, необходимые координаты, цвет нарисованной фигуры и, если специфика фигуры поваляет, то ее толщину. Так устроена механика рисования любой геометрической фигуры с использованием библиотеки Pillow. Но вернемся именно к линии. С помощью данной строчки будет нарисована фиолетовая линия шириной 10 пикселей с левого верхнего угла до правого нижнего угла. Если возникнут трудности с определением координат, запомните:
слева направо, сверху вниз
В таком порядке определяется точка. Чем больше первая координата, тем правее точка, чем больше вторая, тем ниже точка. (относительно вас)
Как нарисовать круг? С помощью функции ellipse можно рисовать круги и эллипсы. Функция принимает на вход координаты верхнего левого и правого нижнего угла прямоугольника, внутри которого будет вписан эллипс и цвет фигуры. Для получения круга описанный прямоугольник должен быть квадратом. Пример:
paint_brush.ellipse((0, 0, 1000, 1000), (0, 255, 0))
Эта строчка рисует круг зеленого цвета на весь холст.
Как нарисовать квадрат? Функции rectangle рисует прямоугольники. Функция принимает на вход координату левого верхнего угла прямоугольника и координату правого нижнего угла и цвет самого прямоугольника. Т.е. тот же эллипс, только с полной заливкой определяемой зоны.
paint_brush.rectangle((0, 0, 1000, 1000), (0, 0, 255))
Эта строка создала синий квадрат во весь холст.
Другие фигуры. Вашу фантазию ничто не сможет ограничить. Вы можете нарисовать абсолютно любую фигуру, которая взбредёт в голову. Она может иметь десятки углов и быть лилового цвета, главное — знать необходимую функцию. polygon — функция, которая принимает на вход неограниченное количество кортежей, содержащих координаты точек, которые соединяет между собой.
Последняя точка соединяется с первой, а получившееся замкнутое пространство закрашивается определенным цветом. С помощью polygon можно рисовать любые многоугольники.
paint_brush.polygon((10, 10), (20, 20), (0, 20), (247, 84, 255))
Эта строка рисует треугольник цвета фуксии в левом верхнем углу холста.
Вы сможете узнать больше о методах PIL.ImageDraw и PIL.Image .
Заключительная часть. Остался последний штрих — сохранить получившийся рисунок. Это делается строкой:
canvas save(‘canvas.png’)
То есть просто сохраняем изрисованный холст.
Наглядный пример. Хочу показать свою первую графическую работу с использованием библиотеки Pillow.
Источник: dzen.ru