turtle

Для работы с пером, которое служит для отрисовки линий вслед за движениями черепахи, у нас есть две функции:

  1. Функция для опускания пера (по умолчанию): pendown()/pd()/down()
  2. Функция поднятия пера: penup()/pu()/up()

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

Проверить состояние пера можно с помощью функции isdown(). Она возвращает True, если перо опущено и False, если перо поднято.

Также можно настроить перо — задать цвет, толщину линии, цвет заливки фигур внутри замкнутой линии и так далее. Для этого служит функция pen().

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

Данная функция поддерживает следующие параметры:

  • shown: Видимость черепашки (True/False).
  • pendown: Состояние пера (опущено или поднято, также True или False).
  • pencolor: Цвет пера (например, “red“, “#FF5733“, или кортеж RGB).
  • fillcolor: Цвет заливки фигур (параметры аналогичные цвету пера).
  • pensize: Толщина линии (положительное число).
  • speed: Скорость черепашки (число от 0 до 10).

Если вы хотите менять отдельные параметры, такие как цвет или ширину пера, можно использовать специализированные функции (pencolor(), pensize(), speed() и т.д.).

Скорость черепахи может быть задана с помощью следующих значений:

  1. Самая быстрая: 'fastest', 0
  2. Быстрая: 'fast', 10
  3. Обычная: 'normal', 6
  4. Медленная: 'slow', 3
  5. Самая медленная: 'slowest', 1

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

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

А также поменяем цвет пера на оранжевый (в формате hex: #F76D47), а размер на 3 пикселя.

Код будет следующий:

from turtle import *

pen(pencolor="#F76D47", pensize=3)
forward(150)
penup()
left(90)
forward(100)
left(90)
pendown()
forward(150)
left(90)
penup()
forward(100)
pendown()
goto(150,100)
done()

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

Туртле 10

Функция dot()

Функция dot(size=None, color=None) рисует заполненную точку (круг) в текущей позиции черепашки. Размер и цвет точки можно задать при помощи аргументов.

Размер точки задаётся параметром size. Если он не указан, будет использован стандартный размер.

Точка имеет цвет заливки, который можно указать параметром color. Если цвет не указан, используется текущий цвет пера черепашки (pencolor).

Давайте нарисуем несколько точек со следующими характеристиками:

  1. Первая точка будет иметь стандартные размер и цвет и расположена в начале координат
  2. Вторая точка будет иметь размер в 10 пикселей, цвет — оранжевый (зададим его в формате hex: #F76D47) и находится по координатам (50,50)
  3. Третья точка будет иметь цвет зелёный, который мы зададим в виде кортежа (167,211,128), размер увеличим до 20 пикселей и поместим её в координаты (100,100).

В начале программы пропишем команду colormode(255). Это необходимо для того, чтобы мы могли использовать классическую запись цвета в формате RGB, где каждому цвету соответствует значение от 0 до 255.

В конце же, чтобы черепаха не мешала обзору, спрячем её, вызвав функцию hideturtle().

from turtle import *

colormode(255)
dot()
penup()
goto(50,50)
dot(10, "#F76D47")
penup()
goto(100,100)
dot(20, (167,211,128))
hideturtle()

done()
Туртле 15

Функции контроля анимации

Функция delay() управляет временем задержки (в миллисекундах) между обновлениями экрана.

Она задаёт глобальную задержку, которая применяется к каждому обновлению экрана при рисовании

Как и многие функции данного модуля, delay(), если её вызвать без передачи аргументов, вернёт текущую задержку между командами. При передачи целого положительного числа установит задержку на заданное количество миллисекунд.

Чем больше задержка, тем более медленная анимация отрисовки.

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

from turtle import *

print('Текущая задержка: ', delay())
pencolor("#A7D380")
forward(150)
left(90)
forward(100)
left(90)
forward(150)
left(90)
forward(100)

# Устанавливаем новую задержу
new_delay = delay() * 4
delay(new_delay)
print('Новая задержка: ', delay())

pencolor("#F76D47")
forward(100)
right(90)
forward(150)
right(90)
forward(100)
right(90)
forward(150)

done()

Запустить код здесь

Функция tracer(n=None, delay=None) управляет анимацией черепашки, позволяя ускорить процесс рисования или полностью отключить его. Это особенно полезно для сложных графиков, где плавная анимация не нужна.

При параметре n=0 данная функция отключает анимацию черепашки, что делает процесс рисования мгновенным. Но в таком случае будет необходимо вручную обновлять графику, для всех команд, которые идут после tracer().

Обновление графики происходит за счет вызова функции update().

Вторым же параметром данной функции является значение задержки между кадрами (обновлением экрана). То есть аналогично работе функции delay().

Можете сравнить работу speed() и tracer() на следующем примере:

import time
from turtle import *

speed(0)
pencolor("#A7D380")
forward(150)
left(90)
forward(100)
left(90)
forward(150)
left(90)
forward(100)

# Останавливаем работу программы на 2 секунды
time.sleep(2)

tracer(0)
pencolor("#F76D47")
forward(100)
right(90)
forward(150)
right(90)
forward(100)
right(90)
forward(150)
update()

done()

Запустить код здесь

Функции очистки экрана

Для того, чтобы очистить ваше полотно применяются три команды:

  1. clear()
  2. reset() / resetscreen()
  3. clearscreen()

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

Функция reset() сбрасывает черепаху и графическое окно в изначальное состояние. Таким образом, после её вызова:

  • Черепаха возвращается в центр окна (позиция (0, 0)).
  • Черепаха ориентируется вправо (угол 0°).
  • Удаляются все нарисованные линии и фигуры.
  • Настройки пера (цвет, толщина и т.д.) сбрасываются к значениям по умолчанию.
  • Но цвет или изображение фона не изменяется

Функция clearscreen() возвращает всё содержимое графического окна к изначальному состоянию.

Работа этих трёх функций продемонстрирована в следующем примере:

import time
from turtle import *

# clear
Screen().bgcolor("#ECFBFF")
pencolor("#A7D380")
pensize(5)
forward(150)
left(90)
forward(100)
time.sleep(1)
clear()

#reset
left(90)
forward(150)
left(90)
forward(150)
time.sleep(1)
reset()

#clearscreen
forward(150)
left(90)
forward(100)
time.sleep(1)
Screen().clearscreen()

done()

Запустить код здесь

Другие статьи по теме доступны по ссылкам: