Как рисовать в консоли python

Обновлено: 07.07.2024

На этом занятии вы будете рисовать графические объекты на языке Python.

Благодаря Джону Зелле у нас есть вспомогательная библиотека графики ( graphics.py ), с помощью которой мы будем отображать примитивные объекты на экране.

Установка и подключение библиотеки

Нужно скачать файл и положить в ту (именно в ту) директорию, где вы собираетесь далее писать свои программы.

Чтобы импортировать возможности библиотеки graphics в вашей программе нужно вставить:

Теперь все объекты этой библиотеки будут вызываться через точку: gr.КакойНибудьОбъект() .

Обзор команд модуля graphics

Графическое окно — это место, где будут размещаться графические примитивы:

Создание графических примитивов:

Отрисовка примитива в графическом окне производится отдельной командой:

Пример программы

Скопируйте код в среду разработки, запустите и посмотрите на результат.

Документация

Для выполнения данной работы линий, прямоугольников и кругов вполне достаточно. Но если вы хотите узнать еще больше команд, то загляните в документацию библиотеки graphics.

Бесструктурное программирование

Самостоятельное задание №1. Пейзаж

Используя полученные знания, нарисуйте любую статическую сцену, которая содержит не менее 5 различных объектов, состоящих из пяти и более примитивов. Проявите свою творческую натуру, но не занимайтесь этим более 30 минут, ведь вашу сцену можно улучшать вечно, а наша задача немного в другом. Примером сцены может являться следующая картинка:


Сделайте это задание и дождитесь дальнейших указаний преподавателя.


Cтруктурное программирование

В предыдущем упражнении вы должны были почувствовать что такое "ковыряться в коде". Очень сложно охватить всю программу сразу, вместить её в сознание.

Пока объем вашего кода не достигает 100 строк, вы ещё можете ориентироваться в нём. Как только цифра возрастет на порядок, вы потеряетесь даже в своей собственной программе.

Теперь давайте изменим нашу программу так, чтобы она была разделена на логические независимые куски кода — функции.

Приведем пример простой программы, чтобы показать, как работают функции.

Обратите внимание, что все входящие в тело функции операции должны быть с отступом в четыре пробела. А также на тот факт, что без вызова функции все операции, которые прописаны в теле функции, выполнены не будут.

Функции — мощный инструмент. Они позволяют организовать программу так, чтобы было удобно работать с её отдельными фрагментами по очереди. Идея в том, чтобы разделить наш код на независимые друг от друга по смыслу куски и каждому дать имя.

Именование функций

Выбор имён для функций — очень важная творческая часть работы программиста. Имя должно отражать содержание того, что делает функция.

Пример структурного программирования

Как видите, функциональность программы не изменилась, но если вы увидете ее в первый раз, вы разберетесь с ней гораздо быстрее, чем если бы вы разбирались с первоначальным примером, написанным без использования функций.

Самостоятельное задание №2

Измените вашу сцену так, чтобы обьекты были нарисованы на пейзаже в других местах. Добавьте ещё два таких же облака, но так, чтобы все три облака выглядели естественно, не выстроившись в линейку.

Функции с параметрами

А теперь представьте, что в предыдущей самостоятельной работе вас попросили сделать не две копии, а сто?

Наивным решением будет написать сто почти одинаковых функций с измененными цифрами, но если мы вдруг внезапно захотим во всех этих обьектах убрать какой-либо примитив — нам придется залезть в каждую такую функцию и изменить соответствующие строчки. Такой подход нежизнеспособен.

Рациональным выходом из подобной ситуации будет являться использование функций с параметрами. В физике положение обьекта мы задавали с помощью координат, почему бы такой подход не распространить и на графические обьекты?

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

Продемонстрируем, как этот код можно оптимизировать.

Как видите теперь, если мы хотим изменить конструкцию обоих глаз одновременно, нам достаточно изменить код в одном месте, и это изменение распространиться на все обьекты, которые отрисовываются данной функцией.

Самостоятельное задание №3

Используя функции с параметрами оптимизируйте свой код, который отрисовывал два обьекта из предыдущего задания.

Если при разработке вы встречаетесь с ситуацией, когда в коде присутствуют две последовательности действий, которые отличаются совсем немного — лучше обощить их и написать одну общую функцию с параметрами, которая в зависимости от входных данных, будет решать разные задачи.

Это одна из самых важных вещей в программировании — разделять программу на модульные абстракции. Это не просто и на эту тему написано достаточно много книг, однако первый шаг в этом направлении вы уже сделали. По возможности старайтесь находить элегантные решения. Это поможет вам сэкономить уйму времени в будущем.

В работе со студентами и учениками я заметила, что при изучении какого-либо языка программирования большой интерес вызывает работа с графикой. Даже те студенты, которые скучали на заданиях про числа Фибоначчи, и уже казалось бы у них пропадал интерес к изучению языка, активизировались на темах, связанных с графикой.

Поэтому предлагаю потренироваться в написании небольшой графической програмки на Python с использованием tkinter (кроссплатформенная библиотека для разработки графического интерфейса на языке Python).

Код в этой статье написан для Python 3.5.

Задание: написание программы для рисования на холсте произвольного размера кругов разных цветов.

Не сложно, возможно программа «детская», но я думаю, для яркой иллюстрации того, что может tkinter самое оно.

Хочу рассказать сначала о том, как указать цвет. Конечно удобным для компьютера способом. Для этого в tkinter есть специальный инструмент, который можно запустить таким образом:

Пояснения к коду:

  • rom tkinter import * — импорт библиотеки, вернее всех ее методов, на что указывает звездочка (*);
  • window = Tk() — создание окна tkinter;
  • colorchooser.askcolor() — открывает окно выбора цвета и возвращает кортеж из двух значений: кортеж из трех элементов, интенсивность каждой RGB цвета, и строка. цвет в шестнадцатиричной системе.

Примечание: как сказано в коментариях ниже — звёздочка не все импортирует, надёжнее будет написать
from tkinter import colorchooser

Можно для определения цвета рисования использовать английские название цветов. Здесь хочу заметить, что не все они поддерживаются. Тут говорится, что без проблем вы можете использовать цвета «white», «black», «red», «green», «blue», «cyan», «yellow», «magenta». Но я все таки поэкспериментировала, и вы увидите дальше, что из этого вышло.

Для того, чтобы рисовать в Python необходимо создать холст. Для рисования используется система координат х и у, где точка (0, 0) находится в верхнем левом углу.

В общем хватит вступлений — начнем.


Пояснения к коду:

  • from random import * — импорт всех методов модуля random;
  • from tkinter import * — это вы уже знаете;
  • переменная size понадобиться потом;
  • root = Tk() — создаем окно;
  • canvas = Canvas(root, width=size, height=size) — создаем холст, используя значение переменной size (вот она и понадобилась);
  • canvas.pack() — указание расположить холст внутри окна;
  • переменная diapason понадобиться потом для использования в условии цикла.
  • while diapason < 1000: — с предусловием, которое говорит о том, что цикл будет повторятся пока переменная diapason не дойдет до 1000.

Здесь хочу остановиться на выборе цвета. Мне хотелось добавить как можно больше вариантов выбора цвета, поэтому я воспользовалась таблицей названий цветов в английском языке. Но вскоре поняла, что многие английские названия не поддерживаются — программа переставала работать. Поэтому определение цвета в шестнадцатиричной системе будет для этих целей более подходящим вариантом.

x0 = randint(0, size) и y0 = randint(0, size) — случайный выбор координат х и у в рамках холста размером size.
d randint(0, size/5) — произвольный выбор размера круга, ограниченный size/5.

canvas.create_oval(x0, y0, x0+d, y0+d, fill=colors) — собственно говоря рисуем круги, в точках с координатами x0 и y0, размерами по вертикали и горизонтали x0+d и y0+d, заливкой цветом, который выбирается случайным образом из списка colors.

root.update() — update() — обрабатывает все задачи, стоящие в очереди. Обычно эта функция используется во время «тяжёлых» расчётов, когда необходимо чтобы приложение оставалось отзывчивым на действия пользователя.

Без этого в итоге отобразятся круги, но процесс их появления будет вам не виден. А именно это придает шарм этой програмке.

diapason += 1 — шаг цикла, счетчик.

В результате получается такая картинка:

image

Мне не понравилось, что справа и вверху какие-то пустые места образовываются, поэтому я немного изменила условие цикла while diapason < 2000 или 3000. Так холст получился более заполненным.

Также можно сделать цикл бесконечным:

Я думаю, можно было бы еще поиграться со скоростью рисования кругов или их движением по холсту. Можно было увеличить варианты выбора цветов. Поставить условие для остановки бесконечного цикла, например по нажатию пробела. Это все задания для будущих программ.

Студенты еще спросили, а можно ли запускать это как заставку на рабочем столе Windows? Пока не нашла как это можно было бы сделать.


Модуль ImageDraw из библиотеки обработки изображений Pillow (PIL) предоставляет методы для рисования круга, квадрата и прямой линии в Python.

Содержание статьи

Создание объекта Draw в Python

Используя объекта Image мы создадим фоновое изображение на которой мы будем рисовать наши фигуры при помощи объекта Draw . Не забудьте импортировать модуль Image и ImageDraw в начале кода.

Здесь создается пустое изображение с размером 500 на 300 пикселей и с тёмно желтым фоном.

Создание картинки в Pillow

Рисуем фигуры в Pillow: ellipse, rectangle и line

Вызываем методы рисования из объекта Draw для рисования фигур на нашем желтом фоне.

Рисуем эллипс, прямоугольник и прямую линию в качестве примера.

draw . ellipse ( ( 100 , 100 , 150 , 200 ) , fill = 'red' , outline = ( 0 , 0 , 0 ) ) draw . rectangle ( ( 200 , 100 , 300 , 200 ) , fill = 'blue' , outline = ( 255 , 255 , 255 ) ) draw . line ( ( 350 , 200 , 450 , 100 ) , fill = 'pink' , width = 10 ) im . save ( 'draw-ellipse-rectangle-line.jpg' , quality = 95 )

Рисуем фигуры в Python

Справочник по параметрам методов рисования

Даже если, способы рисования отличаются в зависимости от используемого метода, следующие параметры являются общими для всех.

Параметр xy указывает прямоугольную область для рисования новой фигуры.

Уточняется один из следующих форматов:

  • (((Верхняя левая x координата, Верхняя левая y координата), (нижняя правая x координата, нижняя правая y координата)) ;
  • (Верхняя левая x координата, Верхняя левая y координата, нижняя правая x координата, нижняя правая y координата) .

В методах line() , polygon() и point() используются многочисленные координаты вместо двух точек, представляющих прямоугольную область.

  • (x1, y1, x2, y2, x3, y3. ) ;
  • ((x1, y1), (x2, y2), (x3, y3). ) .

Метод line() рисует прямую линию, которая связывает каждую точку, polygon() рисует многоугольник, а метод point() рисует точку в 1 пиксель для каждой указанной точки.

Параметр fill указывает какой цвет будет использован для заполнения нашей геометрической формы.

Спецификация формата цвета отличается в зависимости от указанного режима изображения (объект Image ):

  • RGB : Указывает значение цвета в форме (R, G, B) ;
  • L (Черно-белое): Указывает значение (0-255) как целое число).

Значение по умолчанию None (не заполнено).

Есть три способа указать цвет, возьмем красный цвет, его можно записать так:

Параметр outline указывает на цвет границы фигуры.

Спецификация формата цвета такая же, как и у параметра fill которого мы обсуждали выше. Значение по умолчанию равно None (без границ).

Вне зависимости от рисуемой фигуры, вы можете указать размер в пикселях для границы фигуры.

Рисование эллипса и прямоугольника в Python

  • Эллипс (Круг): ellipse(xy, fill, outline) ;
  • Прямоугольник (Квадрат): rectangle(xy, fill, outline) .

Метод ellipse() рисует эллипс, область рисования указывается в параметр xy . Если мы зададим четыре координата которые будут соответствовать квадрату, то у нас получится ровный круг.


В статье рассматривается создание графических интерфейсов с помощью библиотеки Tkinter. Отдельное внимание уделяется виджету Canvas, предназначенному для рисования (draw) в Python.

Tkinter представляет собой графическую кроссплатформенную библиотеку на основе средств Tk. Это свободное ПО, которое включено в стандартную библиотеку языка программирования Python.

  • линий,
  • прямоугольников,
  • эллипсов,
  • текста,
  • окон,
  • изображений.

Но прежде чем продолжить, следует вкратце рассказать о существующих методах позиционирования элементов.

Позиционирование элементов в Python. Python grid

Для позиционирования элементов, во время работы с Tkinter используют разные методы:

Метод grid позволяет поместить элемент в конкретную ячейку условной сетки либо грида. Используется ряд параметров:

  • column — это номер столбца, отсчитывается с нуля;
  • row — это номер строки, отсчитывается с нуля;
  • columnspan — указывает число столбцов, занимаемых элементом;
  • rowspan — указывает число строк;
  • ipadx и ipady — подразумеваются отступы по горизонтали и вертикали от границ компонента до текста компонента;
  • padx и pady — аналогичные отступы, но от границ ячейки грида до границ компонента;
  • sticky — определяет выравнивание элемента в ячейке в случае, когда ячейка больше компонента.

Для начала работы с Tkinter библиотеку сначала надо импортировать:

from tkinter import *

Ниже определен грид из девяти кнопок:


Canvas: рисуем линии в Python

Виджет Canvas предоставляет функциональность, с помощью которой разработчик может нарисовать (drawn) графику в Tkinter. Для чего может понадобиться эта графика? К примеру, для получения статистики, создания своих виджетов, отрисовки небольших игр.

Начинать освоение Canvas лучше всего с линий — примитивных геометрических элементов. В Canvas линию с нужным размером можно создать через метод create_line() . Метод mainloop используется для вызова окна виджета.


У create_line() есть параметры — это координаты x и y . Именно они обозначают начальные и конечные точки будущего линейного отрезка. Вот как этот метод рисует (draws) обычную вертикальную линию:


Можно создавать и пунктирную линию — для этого существует опция dash . У этой опции есть собственные значения, помещенные в скобки. В примере это (4, 2).


  • цифра 4 обозначает длину тире (точки) в пикселях;
  • цифра 2 отвечает за ширину (width) пустого промежутка, существующего между тире (точками).

Если прописать dash=(1, 1) , на выходе получится линия из точек.

Когда рисуешь обычную линию, можно указать в качестве координат несколько конечных точек. Кусочек кода ниже отвечает за отрисовку треугольника — он ведь тоже состоит из простых линий.

В результате весь код отработает следующим образом:


Canvas: рисуем цветные прямоугольники в Python

Цвет — это объект, отображающий комбинацию трех цветов (красного, зеленого, синего — RGB). С помощью кода ниже были нарисованы прямоугольники. Также они были закрашены различными цветами.


Так создается виджет Canvas:


Далее создается прямоугольник, для чего используется create_rectangle() . Здесь надо прописать 4 параметра:

— координатное положение верхней левой ограничительной точки (левого верхнего угла);

— координатное положение нижней правой ограничительной точки (нижнего правого угла).

Если есть необходимость, то посредством параметра outline у прямоугольника задается цвет контура. Окрасить всю внутреннюю область можно с помощью параметра fill :


А вот и итоговый результат:


Рисуем сложные формы

Можно без проблем нарисовать круг, овал и прочие фигуры, включая криволинейные. Именно для этой цели и предназначен код ниже:


Благодаря этому коду будут созданы такие геометрические фигуры, как круг, прямоугольник, овал, дуга, многоугольник. Также следует обратить внимание на контур — он окрасится в красный цвет, а заливка будет зеленой. Ширина контура (width) — 2 px.

Сначала создается круг. Для его получения в Python задействуется метод create_oval() . Первые 4 параметра в нем нужны для указания ограничивающих координат. Здесь x и y являются координатами правой нижней и верхней левой точек квадрата, где помещен круг:


Аналогично создается и овал — меняются лишь первые 4 параметра.

Следующий этап — прямоугольник. Нарисованный restangle тоже имеет координатные значения x и y , играющие роль ограничительных точек.


Далее создается дуга. Так как она — это часть круга, то надо указать ограничительные координаты дуги. Ее угол устанавливается посредством параметра start , а размер угла — с помощью параметра extent :


Последнее — это многоугольник. Так как присутствует много углов, надо задействовать специальный метод create_polygon() , позволяющий задать нужное число координатных значений:


Остается посмотреть результат:


Также с помощью Canvas можно без проблем вставлять изображения и рисовать текст (text), используя шрифты разной высоты (height) и стиля (style).

Другие GUI-библиотеки для Python

Кроме библиотеки Tkinter и виджета Canvas, существует и масса других графических библиотек, применяемых для создания рисунков (drawings). Среди них:

  • Flexx,
  • wxPython,
  • PyQt5,
  • PyGUI,
  • PyGTK и многие другие.

При рисовании обычно применяется каскадный способ: компоненты добавляются поверх друг друга.

Drawing with Turtle

Отдельного упоминания заслуживает модуль Turtle (по аналогии с черепашками Turtles). Этот модуль позволяет создавать на Питоне рисунки и другие графические объекты, включая игры в специальном окне. Для того чтобы приступить к рисованию (drawing), надо сначала присоединить его (импортировать). Делается это одним из 3-х способов:

1) import turtle ;

2) from turtle import open as t ;

3) from turtle import* .

Drawing with Pygame

Pygame — набор модулей, используемый в тех случаях, когда нужно нарисовать 2D-игру. Также Pygame нередко называют библиотекой/фреймворком. С его помощью создают как компьютерные игры, так и мультимедийные приложения.


Pygame сравнивают с Tkinter, который с помощью своих функций и классов предоставляет языку программирования Python доступ к графической библиотеке Tk.

Читайте также: