turtle

Модуль turtle в Python — это встроенный модуль в Python, который предоставляет удобный инструмент для создания графики.

Он использует метод «черепашьей графики», где виртуальная «черепаха» может перемещаться по экрану, оставляя за собой линии. С помощью turtle можно рисовать простые геометрические фигуры, создавать анимации и визуализировать алгоритмы.

Сама по себе «черепаха» была частью оригинального языка программирования Logo. Также вы могли встретить похожий инструментарий в языке КуМир, где для создания графики, в том числе, используется Исполнитель Черепаха.

В чем смысл названия «черепашья графика»? В конце 1960-х годов Сеймур Пейперт, преподаватель Массачусетского технологического института и создатель языка Logo, начал использовать робота, который был похож на черепашку, чтобы обучать детей программированию.

Сеймур Пейперт

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

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

Обычно черепахи передвигаются по песку с помощью ласт, и следы от их передвижения остаются от конечностей (лап), а не от хвоста. Хвост черепах может оставлять следы только в воде или в очень мягком песке, но эти следы будут отличаться от следов, которые обычно ассоциируются с передвижением по пляжу.

На этом минутка «В мире животных» заканчивается, и мы возвращаемся к программированию. Давайте теперь научимся работать с модулем turtle в Python.

Импорт модулей в Python

В Python есть три способа импортировать содержимое модулей, пакетов и библиотек в ваш проект:

  1. Импорт всего модуля целиком.
  2. Импорт отдельных (или всех) функций из модуля.
  3. Импорт с использование псевдонимов.

При работе с модулем turtle мы будем использовать второй вариант импорта, то есть такую конструкцию:

from turtle import *

При этом обратите внимание, что при таком импорте у вас может случиться конфликт имён!

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

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

В редких случаях у вас может возникнуть ошибка, содержащая следующий текст «No module named ‘_tkinter’». Она означает одно их двух: либо версия пакет tkinter не соответствует версии Python, либо данный пакет вовсе не установлен.

Обычно, такая ошибки не возникает, потому что пакет tkinter — стандартный и уже встроен в текущую версию Python. Но если так случилось, что данного пакета у вас нет, установите его следующей командой:

pip install tk

Основные функции модуля turtle

Сразу отметим, что работать с данным модулем, как и предполагается в документации, мы будем в процедурно-ориентированном стиле. То есть не будем создавать новых объектов или изменять какие-либо параметры стандартных объектов. Мы будем просто вызывать необходимые функции прямо в процессе выполнения программы.

Далее мы рассмотрим самые востребованные функции из модуля turtle. С полным списком функций вы можете ознакомиться в официальной документации.

Функции отображения черепахи

Для начала давайте посмотрим на нашу черепаху.

Функция showturtle() делает черепаху видимой на графическом экране. Если черепаха была скрыта ранее с помощью функции hideturtle(), вызов showturtle() снова отображает её.

Многие функции в turtle имеют сокращённую запись. Так, например, функция showturtle() сокращается до st(), а функция hideturtle() — до ht().

Проверить, отображается ли в текущий момент черепаха или нет, можно с помощью функции isvisible(). Она возвращает True, если черепаха отображается, в противоположном случае функция вернёт False.

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

При исполнении следующего кода, у вас на экране откроется окно с полотном и черепахой по центру.

from turtle import *

showturtle()
Туртле 1

У вас сразу может возникнуть вопрос: почему мы какую-то стрелку называем черепахой?

Дело в том, что по умолчанию в качестве исполнителя на экран выводится именно классическая стрелка, которая указывает направление движения исполнителя.

Вы можете изменить внешний вид вашей черепахи на любой из доступных:

  1. Черепаха (turtle)
  2. Стрелка (arrow)
  3. Классическая стрелка (classic)
  4. Квадрат (square)
  5. Круг (circle)
  6. Треугольник (triangle)

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

Например, чтобы изменить форму на черепаху используется следующая команда:

shape(turtle)
Туртле 2

Функции завершения работы с графикой

При работе в некоторых средах разработки, например в PyСharm, вы могли заметить, что при исполнении кода окно с полотном на мгновение открывается и сразу же закрывается.

Предотвратить закрытие окна с полотном можно несколькими способами. Для начала, можно вызвать в конце кода вашей программы функцию done().

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

Или же можно вызвать функцию exitonclick(), которая закроет окно с черепахой по нажатию на левую кнопку мыши.

Сразу закрыть графическое окно можно с помощью функции bye(). В действительности, функция exitonclick() просто привязывает вызов функции bye() к нажатию левой кнопки мыши.

Таким образом, вы можете самостоятельно вызвать bye() по необходимому условию. Это может быть небольшая пауза, или нажатие какой-либо кнопки на клавиатуре.

Остальные функции мы рассмотрим в следующих статьях: