turtle — черепашья графика
Исходный код: Lib/turtle.py
Введение
Черепашья графика — это реализация популярных инструментов геометрического рисования, появившихся в Logo, разработанных Уолли Ферзейгом, Сеймуром Пейпертом и Синтией Соломон в 1967 году.
В Python черепашья графика представляет собой физическую «черепаху» (маленького робота с ручкой), которая рисует на листе бумаги, лежащем на полу.
Это эффективный и хорошо зарекомендовавший себя способ познакомить учащихся с концепциями программирования и взаимодействием с программным обеспечением, поскольку он обеспечивает мгновенную визуальную обратную связь. Кроме того, он предоставляет удобный доступ к графическому выводу в целом.
Изначально черепашье рисование было создано как образовательный инструмент для использования учителями в классе. Для программиста, которому необходимо получить графический вывод, это может быть способом сделать это без необходимости подключать к своей работе более сложные или внешние библиотеки.
Руководство
Новым пользователям стоит начать отсюда. В этом руководстве мы рассмотрим основы черепашьего рисования.
Запуск среды черепашьей графики
В оболочке Python импортируйте все объекты модуля turtle:
from turtle import *
Если возникнет ошибка No module named '_tkinter', вам потребуется установить в своей системе Tk interface package.
Основы рисования
Переместите черепаху вперед на 100 шагов:
forward(100)
Вы должны увидеть (скорее всего, в новом окне на экране) линию, нарисованную черепахой, направленной на восток. Измените направление черепахи, чтобы она повернула на 120 градусов влево (против часовой стрелки):
left(120)
Продолжим рисовать треугольник:
forward(100) left(120) forward(100)
Обратите внимание, как черепаха, изображенная стрелкой, указывает в разные стороны, когда вы ею управляете.
Поэкспериментируйте с этими командами, а также с backward() и right().
Управление пером
Попробуйте изменить цвет — например, color('blue') — и толщину линии — например, width(3), — а затем нарисуйте что-нибудь еще.
Вы также можете перемещать черепаху, не рисуя: поднимите перо с помощью up() перед перемещением. Чтобы снова начать рисовать, используйте down().
Положение черепахи
Верните черепаху в исходную точку (это полезно, если она исчезла за пределами экрана):
home()
Исходное положение находится в центре экрана черепахи. Если вам когда-нибудь понадобится узнать координаты черепахи, получите значения x и y с помощью:
pos()
Исходное положение — (0, 0).
Спустя некоторое время, вероятно, будет полезно очистить окно, чтобы начать заново:
clearscreen()
Создание алгоритмических узоров
С помощью циклов можно создавать геометрические узоры:
for steps in range(100):
for c in ('blue', 'red', 'green'):
color(c)
forward(steps)
right(30)
— и, конечно, их ограничивает только воображение!
Давайте нарисуем звезду вверху этой страницы. Нам нужны красные линии с желтой заливкой:
color('red')
fillcolor('yellow')
Так же как up() и down() определяют, будут ли рисоваться линии, заливку можно включать и выключать:
begin_fill()
Теперь создадим цикл:
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
abs(pos()) < 1 — хороший способ узнать, что черепаха вернулась в исходное положение.
Наконец, завершим заливку:
end_fill()
(Обратите внимание, что заливка выполняется только после вызова команды end_fill().)
Как…
В этом разделе рассматриваются типичные варианты использования черепахи и способы работы с ней.
Как можно быстрее приступить к работе
Одна из приятных особенностей черепашьей графики — мгновенная визуальная обратная связь, которую обеспечивают простые команды. Это отличный способ познакомить детей с основами программирования без лишних сложностей (и, конечно, не только детей).
Модуль turtle позволяет делать это, предоставляя все основные функции с помощью from turtle import *. Такой подход описан в руководстве по черепашьей графике.
Стоит отметить, что у многих команд turtle есть еще более короткие эквиваленты, например fd() вместо forward(). Они особенно полезны при работе с учащимися, для которых набор текста затруднителен.
Для работы черепашьей графики в вашей системе должен быть установлен Tk interface package. Учтите, что установка не всегда проходит просто, поэтому проверьте это заранее, если планируете заниматься черепашьей графикой с учащимися.
Использование пространства имен модуля turtle
Использовать from turtle import * удобно, но имейте в виду, что при этом импортируется довольно много объектов. Если вы занимаетесь чем-то помимо черепашьей графики, есть риск конфликта имен (это особенно важно, если вы используете черепашью графику в скрипте, который может импортировать другие модули).
Решение — использовать import turtle: fd() заменяется на turtle.fd(), width() — на turtle.width() и так далее. (Если постоянно набирать «turtle» утомительно, можно, например, использовать import turtle
as t.)
Использование черепашьей графики в скрипте
Рекомендуется использовать пространство имен модуля turtle, как описано выше, например:
import turtle as t
from random import random
for i in range(100):
steps = int(random() * 100)
angle = int(random() * 360)
t.right(angle)
t.fd(steps)
Однако потребуется сделать еще один шаг: как только скрипт завершится, Python также закроет окно черепахи. Добавьте в конец скрипта:
t.mainloop()
Теперь скрипт будет ожидать завершения работы и не закроется, пока его не остановят, например закрыв окно черепашьей графики.
Использование объектно-ориентированной черепашьей графики
Если речь не идет о самом первом знакомстве или о быстром эксперименте, обычно удобнее и гораздо эффективнее использовать объектно-ориентированный подход к черепашьей графике. Например, он позволяет одновременно отображать на экране несколько черепах.
При таком подходе различные команды черепахи становятся методами объектов (в основном объектов Turtle). Объектно-ориентированный подход можно использовать в оболочке, но чаще он применяется в скриптах Python.
Тогда приведенный выше пример будет выглядеть так:
from turtle import Turtle
from random import random
t = Turtle()
for i in range(100):
steps = int(random() * 100)
angle = int(random() * 360)
t.right(angle)
t.fd(steps)
t.screen.mainloop()
Обратите внимание на последнюю строку. t.screen — это экземпляр класса Screen, на котором существует экземпляр Turtle; он создается автоматически вместе с черепахой.
Экран черепахи можно настроить, например, так:
t.screen.title('Object-oriented turtle demo')
t.screen.bgcolor("orange")
Справочник по черепашьей графике
Примечание
В следующей документации приведен список аргументов функций. У методов, разумеется, есть дополнительный первый аргумент self, который здесь опущен.
Методы Turtle
- Перемещение черепахи
-
- Перемещение и рисование
- Получение состояния черепахи
- Настройка и измерение
- Управление пером
-
- Состояние рисования
- Управление цветом
- Заливка
- Дополнительное управление рисованием
- Состояние черепахи
-
- Видимость
- Внешний вид
- Использование событий
- Специальные методы Turtle
Методы TurtleScreen/Screen
- Управление окном
- Управление анимацией
- Использование событий экрана
- Настройки и специальные методы
- Методы ввода
- Методы, относящиеся к Screen
Методы RawTurtle/Turtle и соответствующие функции
Большинство примеров в этом разделе относятся к экземпляру Turtle с именем turtle.
Перемещение черепашки
-
turtle.forward(distance) -
turtle.fd(distance) -
- Параметры:
-
distance – число (целое или с плавающей точкой)
Переместить черепашку вперёд на указанное расстояние distance в направлении её движения.
>>> turtle.position() (0.00,0.00) >>> turtle.forward(25) >>> turtle.position() (25.00,0.00) >>> turtle.forward(-75) >>> turtle.position() (-50.00,0.00)
-
turtle.back(distance) -
turtle.bk(distance) -
turtle.backward(distance) -
- Параметры:
-
distance – число
Переместить черепашку назад на distance, в направлении, противоположном её движению. Не менять направление черепашки.
>>> turtle.position() (0.00,0.00) >>> turtle.backward(30) >>> turtle.position() (-30.00,0.00)
-
turtle.right(angle) -
turtle.rt(angle) -
- Параметры:
-
angle – число (целое или с плавающей точкой)
Повернуть черепашку вправо на angle единиц. (По умолчанию единицы измерения — градусы, но их можно задать с помощью функций
degrees()иradians().) Направление отсчёта угла зависит от режима черепашки; см.mode().>>> turtle.heading() 22.0 >>> turtle.right(45) >>> turtle.heading() 337.0
-
turtle.left(angle) -
turtle.lt(angle) -
- Параметры:
-
angle – число (целое или с плавающей точкой)
Повернуть черепашку влево на angle единиц. (По умолчанию единицы измерения — градусы, но их можно задать с помощью функций
degrees()иradians().) Направление отсчёта угла зависит от режима черепашки; см.mode().>>> turtle.heading() 22.0 >>> turtle.left(45) >>> turtle.heading() 67.0
-
turtle.goto(x, y=None) -
turtle.setpos(x, y=None) -
turtle.setposition(x, y=None) -
- Параметры:
-
- x – число или пара/вектор чисел
-
y – число или
None
Если y —
None, x должен быть парой координат или объектомVec2D(например, таким, который возвращаетpos()).Переместить черепашку в абсолютную позицию. Если перо опущено, нарисовать линию. Не менять ориентацию черепашки.
>>> tp = turtle.pos() >>> tp (0.00,0.00) >>> turtle.setpos(60,30) >>> turtle.pos() (60.00,30.00) >>> turtle.setpos((20,80)) >>> turtle.pos() (20.00,80.00) >>> turtle.setpos(tp) >>> turtle.pos() (0.00,0.00)
-
turtle.teleport(x, y=None, *, fill_gap=False) -
- Параметры:
-
-
x – число или
None -
y – число или
None - fill_gap – логическое значение
-
x – число или
Переместить черепашку в абсолютную позицию. В отличие от goto(x, y), линия не будет нарисована. Ориентация черепашки не изменится. Если в данный момент выполняется заливка, многоугольник(и), из которых черепашка телепортировалась, будут залиты после её ухода, а после телепортации заливка начнётся снова. Это можно отключить с помощью fill_gap=True: тогда воображаемая линия, пройденная при телепортации, будет служить границей заливки, как в goto(x, y).
>>> tp = turtle.pos() >>> tp (0.00,0.00) >>> turtle.teleport(60) >>> turtle.pos() (60.00,0.00) >>> turtle.teleport(y=10) >>> turtle.pos() (60.00,10.00) >>> turtle.teleport(20, 30) >>> turtle.pos() (20.00,30.00)
Добавлено в версии 3.12.
-
turtle.setx(x) -
- Параметры:
-
x – число (целое или с плавающей точкой)
Установить первую координату черепашки равной x, не изменяя вторую координату.
>>> turtle.position() (0.00,240.00) >>> turtle.setx(10) >>> turtle.position() (10.00,240.00)
-
turtle.sety(y) -
- Параметры:
-
y – число (целое или с плавающей точкой)
Установить вторую координату черепашки равной y, не изменяя первую координату.
>>> turtle.position() (0.00,40.00) >>> turtle.sety(-10) >>> turtle.position() (0.00,-10.00)
-
turtle.setheading(to_angle) -
turtle.seth(to_angle) -
- Параметры:
-
to_angle – число (целое или с плавающей точкой)
Установить ориентацию черепашки равной to_angle. Ниже приведены некоторые распространённые направления в градусах:
стандартный режим
режим logo
0 — восток
0 — север
90 — север
90 — восток
180 — запад
180 — юг
270 — юг
270 — запад
>>> turtle.setheading(90) >>> turtle.heading() 90.0
-
turtle.home() -
Переместить черепашку в начало координат — точку (0,0) — и установить её направление, заданное при запуске (оно зависит от режима; см.
mode()).>>> turtle.heading() 90.0 >>> turtle.position() (0.00,-10.00) >>> turtle.home() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0
-
turtle.circle(radius, extent=None, steps=None) -
- Параметры:
-
- radius – число
-
extent – число (или
None) -
steps – целое число (или
None)
Нарисовать окружность с заданным радиусом radius. Центр находится на расстоянии radius слева от черепашки; extent — угол — определяет, какая часть окружности будет нарисована. Если extent не задан, нарисовать всю окружность. Если extent не соответствует полной окружности, одна конечная точка дуги совпадает с текущим положением пера. При положительном значении radius нарисовать дугу против часовой стрелки, в противном случае — по часовой стрелке. В конце направление черепашки изменится на величину extent.
Поскольку окружность аппроксимируется вписанным правильным многоугольником, параметр steps определяет количество используемых шагов. Если он не задан, значение вычисляется автоматически. Можно использовать для рисования правильных многоугольников.
>>> turtle.home() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0 >>> turtle.circle(50) >>> turtle.position() (-0.00,0.00) >>> turtle.heading() 0.0 >>> turtle.circle(120, 180) # draw a semicircle >>> turtle.position() (0.00,240.00) >>> turtle.heading() 180.0
-
turtle.dot(size=None, *color) -
- Параметры:
-
- size – целое число >= 1 (если задано)
- color – строка с обозначением цвета или кортеж числовых значений цвета
Нарисовать круговую точку диаметром size, используя цвет color. Если size не задан, используется максимум из pensize+4 и 2*pensize.
>>> turtle.home() >>> turtle.dot() >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) >>> turtle.position() (100.00,-0.00) >>> turtle.heading() 0.0
-
turtle.stamp() -
Оставить на холсте отпечаток фигуры черепашки в её текущем положении. Вернуть stamp_id этого отпечатка; его можно удалить вызовом
clearstamp(stamp_id).>>> turtle.color("blue") >>> stamp_id = turtle.stamp() >>> turtle.fd(50)
-
turtle.clearstamp(stampid) -
- Параметры:
-
stampid – целое число; должно быть значением, возвращённым предыдущим вызовом
stamp()
Удалить отпечаток с заданным значением stampid.
>>> turtle.position() (150.00,-0.00) >>> turtle.color("blue") >>> astamp = turtle.stamp() >>> turtle.fd(50) >>> turtle.position() (200.00,-0.00) >>> turtle.clearstamp(astamp) >>> turtle.position() (200.00,-0.00)
-
turtle.clearstamps(n=None) -
- Параметры:
-
n – целое число (или
None)
Удалить все или первые/последние n отпечатков черепашки. Если n —
None, удалить все отпечатки; если n > 0, удалить первые n отпечатков; если n < 0, удалить последние n отпечатков.>>> for i in range(8): ... unused_stamp_id = turtle.stamp() ... turtle.fd(30) >>> turtle.clearstamps(2) >>> turtle.clearstamps(-2) >>> turtle.clearstamps()
-
turtle.undo() -
Отменить (повторно) последнее действие или последние действия черепашки. Количество доступных для отмены действий определяется размером буфера отмены.
>>> for i in range(4): ... turtle.fd(50); turtle.lt(80) ... >>> for i in range(8): ... turtle.undo()
-
turtle.speed(speed=None) -
- Параметры:
-
speed – целое число в диапазоне 0..10 или строка, задающая скорость (см. ниже)
Установить скорость черепашки равной целому значению в диапазоне 0..10. Если аргумент не задан, вернуть текущую скорость.
Если входное значение — число больше 10 или меньше 0.5, скорость устанавливается равной 0. Строковые значения скорости преобразуются в значения скорости следующим образом:
- “fastest”: 0
- “fast”: 10
- “normal”: 6
- “slow”: 3
- “slowest”: 1
Скорости от 1 до 10 обеспечивают всё более быструю анимацию рисования линий и поворотов черепашки.
Внимание: speed = 0 означает, что анимация не выполняется. Команды forward/back заставляют черепашку мгновенно перемещаться, а left/right — мгновенно поворачиваться.
>>> turtle.speed() 3 >>> turtle.speed('normal') >>> turtle.speed() 6 >>> turtle.speed(9) >>> turtle.speed() 9
Сведения о состоянии черепашки
-
turtle.position() -
turtle.pos() -
Вернуть текущее положение черепашки (x,y) в виде вектора
Vec2D.>>> turtle.pos() (440.00,-0.00)
-
turtle.towards(x, y=None) -
- Параметры:
-
- x – число, пара/вектор чисел или экземпляр черепашки
-
y – число, если x — число; иначе
None
Вернуть угол между линией от положения черепашки до позиции, заданной координатами (x,y), вектором или другой черепашкой. Значение зависит от начальной ориентации черепашки, которая определяется режимом — “standard”/”world” или “logo”.
>>> turtle.goto(10, 10) >>> turtle.towards(0,0) 225.0
-
turtle.xcor() -
Вернуть координату x черепашки.
>>> turtle.home() >>> turtle.left(50) >>> turtle.forward(100) >>> turtle.pos() (64.28,76.60) >>> print(round(turtle.xcor(), 5)) 64.27876
-
turtle.ycor() -
Вернуть координату y черепашки.
>>> turtle.home() >>> turtle.left(60) >>> turtle.forward(100) >>> print(turtle.pos()) (50.00,86.60) >>> print(round(turtle.ycor(), 5)) 86.60254
-
turtle.heading() -
Вернуть текущее направление черепашки (значение зависит от режима черепашки; см.
mode()).>>> turtle.home() >>> turtle.left(67) >>> turtle.heading() 67.0
-
turtle.distance(x, y=None) -
- Параметры:
-
- x – число, пара/вектор чисел или экземпляр черепашки
-
y – число, если x — число; иначе
None
Вернуть расстояние от черепашки до точки (x,y), заданного вектора или другой заданной черепашки в единицах шага черепашки.
>>> turtle.home() >>> turtle.distance(30,40) 50.0 >>> turtle.distance((30,40)) 50.0 >>> joe = Turtle() >>> joe.forward(77) >>> turtle.distance(joe) 77.0
Настройки измерений
-
turtle.degrees(fullcircle=360.0) -
- Параметры:
-
fullcircle – число
Задать единицы измерения углов, то есть количество «градусов» в полной окружности. Значение по умолчанию — 360 градусов.
>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 >>> # Change angle measurement unit to grad (also known as gon, >>> # grade, or gradian and equals 1/100-th of the right angle.) >>> turtle.degrees(400.0) >>> turtle.heading() 100.0 >>> turtle.degrees(360) >>> turtle.heading() 90.0
-
turtle.radians() -
Задать радианы в качестве единиц измерения углов. Эквивалентно
degrees(2*math.pi).>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 >>> turtle.radians() >>> turtle.heading() 1.5707963267948966
Управление пером
Состояние рисования
-
turtle.pendown() -
turtle.pd() -
turtle.down() -
Опустить перо — при перемещении будет выполняться рисование.
-
turtle.penup() -
turtle.pu() -
turtle.up() -
Поднять перо — при перемещении рисование выполняться не будет.
-
turtle.pensize(width=None) -
turtle.width(width=None) -
- Параметры:
-
width – положительное число
Задать толщину линии равной width или вернуть её. Если для resizemode задано значение “auto”, а turtleshape — многоугольник, этот многоугольник будет нарисован линией той же толщины. Если аргумент не задан, возвращается текущая толщина пера.
>>> turtle.pensize() 1 >>> turtle.pensize(10) # from here on lines of width 10 are drawn
-
turtle.pen(pen=None, **pendict) -
- Параметры:
-
- pen – словарь с некоторыми или всеми перечисленными ниже ключами
- pendict – один или несколько именованных аргументов с перечисленными ниже ключами в качестве имён
Вернуть или задать атрибуты пера в виде «словаря пера» со следующими парами ключ/значение:
- “shown”: True/False
- “pendown”: True/False
- “pencolor”: строка с обозначением цвета или кортеж значений цвета
- “fillcolor”: строка с обозначением цвета или кортеж значений цвета
- “pensize”: положительное число
- “speed”: число в диапазоне 0..10
- “resizemode”: “auto” или “user” или “noresize”
- “stretchfactor”: (положительное число, положительное число)
- “outline”: положительное число
- “tilt”: число
Этот словарь можно использовать в качестве аргумента последующего вызова
pen(), чтобы восстановить прежнее состояние пера. Кроме того, один или несколько этих атрибутов можно передать в виде именованных аргументов. Это позволяет задать несколько атрибутов пера в одной инструкции.>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) >>> sorted(turtle.pen().items()) [('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'), ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'), ('shearfactor', 0.0), ('shown', True), ('speed', 9), ('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)] >>> penstate=turtle.pen() >>> turtle.color("yellow", "") >>> turtle.penup() >>> sorted(turtle.pen().items())[:3] [('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow')] >>> turtle.pen(penstate, fillcolor="green") >>> sorted(turtle.pen().items())[:3] [('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red')]
-
turtle.isdown() -
Вернуть
True, если перо опущено, иFalse, если оно поднято.>>> turtle.penup() >>> turtle.isdown() False >>> turtle.pendown() >>> turtle.isdown() True
Управление цветом
-
turtle.pencolor(*args) -
Вернуть или задать цвет пера.
Допускаются четыре формата ввода:
-
pencolor() -
Вернуть текущий цвет пера в виде строки спецификации цвета или кортежа (см. пример). Это значение можно использовать в качестве входного параметра другого вызова color/pencolor/fillcolor.
-
pencolor(colorstring) -
Задать цвет пера равным colorstring — строке спецификации цвета Tk, например
"red","yellow"или"#33cc8c". -
pencolor((r, g, b)) -
Задать цвет пера как цвет RGB, представленный кортежем значений r, g и b. Каждое из значений r, g и b должно находиться в диапазоне 0..colormode, где colormode равен либо 1.0, либо 255 (см.
colormode()). -
pencolor(r, g, b) -
Задать цвет пера как цвет RGB, представленный значениями r, g и b. Каждое из значений r, g и b должно находиться в диапазоне 0..colormode.
Если turtleshape — многоугольник, его контур будет нарисован новым цветом пера.
>>> colormode() 1.0 >>> turtle.pencolor() 'red' >>> turtle.pencolor("brown") >>> turtle.pencolor() 'brown' >>> tup = (0.2, 0.8, 0.55) >>> turtle.pencolor(tup) >>> turtle.pencolor() (0.2, 0.8, 0.5490196078431373) >>> colormode(255) >>> turtle.pencolor() (51.0, 204.0, 140.0) >>> turtle.pencolor('#32c18f') >>> turtle.pencolor() (50.0, 193.0, 143.0) -
-
turtle.fillcolor(*args) -
Вернуть или задать цвет заливки.
Допускаются четыре формата ввода:
-
fillcolor() -
Вернуть текущий цвет заливки в виде строки спецификации цвета, возможно, в формате кортежа (см. пример). Это значение можно использовать в качестве входного параметра другого вызова color/pencolor/fillcolor.
-
fillcolor(colorstring) -
Задать цвет заливки равным colorstring — строке спецификации цвета Tk, например
"red","yellow"или"#33cc8c". -
fillcolor((r, g, b)) -
Задать цвет заливки как цвет RGB, представленный кортежем значений r, g и b. Каждое из значений r, g и b должно находиться в диапазоне 0..colormode, где colormode равен либо 1.0, либо 255 (см.
colormode()). -
fillcolor(r, g, b) -
Задать цвет заливки как цвет RGB, представленный значениями r, g и b. Каждое из значений r, g и b должно находиться в диапазоне 0..colormode.
Если turtleshape — многоугольник, его внутренняя область будет закрашена новым цветом заливки.
>>> turtle.fillcolor("violet") >>> turtle.fillcolor() 'violet' >>> turtle.pencolor() (50.0, 193.0, 143.0) >>> turtle.fillcolor((50, 193, 143)) # Integers, not floats >>> turtle.fillcolor() (50.0, 193.0, 143.0) >>> turtle.fillcolor('#ffffff') >>> turtle.fillcolor() (255.0, 255.0, 255.0) -
-
turtle.color(*args) -
Вернуть или задать цвет пера и цвет заливки.
Допускается несколько форматов ввода. В них используется от 0 до 3 аргументов:
-
color() -
Вернуть текущие цвет пера и цвет заливки в виде пары строк спецификации цвета или кортежей, возвращаемых функциями
pencolor()иfillcolor(). -
color(colorstring), color((r,g,b)), color(r,g,b) -
Входные данные такие же, как для
pencolor(); установить заданное значение и для цвета заливки, и для цвета пера. -
color(colorstring1, colorstring2), color((r1,g1,b1), (r2,g2,b2)) -
Эквивалентно
pencolor(colorstring1)иfillcolor(colorstring2); то же справедливо и при использовании другого формата ввода.
Если turtleshape — многоугольник, его контур и внутренняя область будут нарисованы новыми цветами.
>>> turtle.color("red", "green") >>> turtle.color() ('red', 'green') >>> color("#285078", "#a0c8f0") >>> color() ((40.0, 80.0, 120.0), (160.0, 200.0, 240.0)) -
См. также: метод Screen colormode().
Заливка
-
turtle.filling() -
Вернуть состояние заливки (
True, если выполняется заливка, иначеFalse).>>> turtle.begin_fill() >>> if turtle.filling(): ... turtle.pensize(5) ... else: ... turtle.pensize(3)
-
turtle.begin_fill() -
Вызвать непосредственно перед рисованием фигуры, которую нужно залить.
-
turtle.end_fill() -
Залить фигуру, нарисованную после последнего вызова
begin_fill().Заполнение областей перекрытия самопересекающихся многоугольников или нескольких фигур зависит от графической системы операционной системы, типа перекрытия и количества перекрытий. Например, звезда Turtle выше может быть целиком жёлтой или иметь белые участки.
>>> turtle.color("black", "red") >>> turtle.begin_fill() >>> turtle.circle(80) >>> turtle.end_fill()
Дополнительные средства управления рисованием
-
turtle.reset() -
Удалить рисунки черепашки с экрана, вернуть черепашку в центр и установить переменные в значения по умолчанию.
>>> turtle.goto(0,-22) >>> turtle.left(100) >>> turtle.position() (0.00,-22.00) >>> turtle.heading() 100.0 >>> turtle.reset() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0
-
turtle.clear() -
Удалить рисунки черепашки с экрана. Не перемещать черепашку. Состояние и положение черепашки, а также рисунки других черепашек не изменятся.
-
turtle.write(arg, move=False, align='left', font=('Arial', 8, 'normal')) -
- Параметры:
-
- arg – объект, который будет записан в TurtleScreen
- move – True/False
- align – одна из строк “left”, “center” или “right”
- font – кортеж из трёх элементов (fontname, fontsize, fonttype)
Записать текст — строковое представление arg — в текущем положении черепашки, выровняв его согласно align (“left”, “center” или “right”) и используя заданный шрифт. Если значение move истинно, перо перемещается в нижний правый угол текста. По умолчанию move равно
False.>>> turtle.write("Home = ", True, align="center") >>> turtle.write((0,0), True)
Состояние черепахи
Видимость
-
turtle.hideturtle() -
turtle.ht() -
Сделать черепаху невидимой. Это хорошая идея — делать это в процессе выполнения сложного рисунка, поскольку скрытие черепахи заметно ускоряет рисование.
>>> turtle.hideturtle()
-
turtle.showturtle() -
turtle.st() -
Сделать черепаху видимой.
>>> turtle.showturtle()
-
turtle.isvisible() -
Возвращает
True, если черепаха отображается, иFalse, если она скрыта.>>> turtle.hideturtle() >>> turtle.isvisible() False >>> turtle.showturtle() >>> turtle.isvisible() True
Внешний вид
-
turtle.shape(name=None) -
- Параметры:
-
name — строка, содержащая допустимое имя фигуры
Задает черепахе фигуру с указанным именем name или, если имя не указано, возвращает имя текущей фигуры. Фигура с именем name должна присутствовать в словаре фигур TurtleScreen. Изначально доступны следующие многоугольные фигуры: “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”. О работе с фигурами см. метод Screen
register_shape().>>> turtle.shape() 'classic' >>> turtle.shape("turtle") >>> turtle.shape() 'turtle'
-
turtle.resizemode(rmode=None) -
- Параметры:
-
rmode — одна из строк “auto”, “user”, “noresize”
Задает режим изменения размера одним из значений: “auto”, “user”, “noresize”. Если rmode не указан, возвращает текущий режим изменения размера. Разные режимы изменения размера имеют следующие эффекты:
- “auto”: внешний вид черепахи подстраивается в соответствии со значением pensize.
- “user”: внешний вид черепахи подстраивается в соответствии со значениями коэффициентов растяжения и ширины контура (outline), заданными с помощью
shapesize(). - “noresize”: внешний вид черепахи не изменяется.
При вызове с аргументами
resizemode("user")вызывается методомshapesize().>>> turtle.resizemode() 'noresize' >>> turtle.resizemode("auto") >>> turtle.resizemode() 'auto'
-
turtle.shapesize(stretch_wid=None, stretch_len=None, outline=None) -
turtle.turtlesize(stretch_wid=None, stretch_len=None, outline=None) -
- Параметры:
-
- stretch_wid — положительное число
- stretch_len — положительное число
- outline — положительное число
Возвращает или задает коэффициенты растяжения пера по осям x/y и/или ширину контура. Устанавливает режим изменения размера “user”. Только если режим изменения размера установлен в “user”, черепаха будет отображаться растянутой в соответствии со своими коэффициентами растяжения: stretch_wid — коэффициент растяжения перпендикулярно направлению движения, stretch_len — коэффициент растяжения в направлении движения, outline задает ширину контура фигуры.
>>> turtle.shapesize() (1.0, 1.0, 1) >>> turtle.resizemode("user") >>> turtle.shapesize(5, 5, 12) >>> turtle.shapesize() (5, 5, 12) >>> turtle.shapesize(outline=8) >>> turtle.shapesize() (5, 5, 8)
-
turtle.shearfactor(shear=None) -
- Параметры:
-
shear — число (необязательно)
Задает или возвращает текущий коэффициент сдвига. Сдвигает фигуру черепахи в соответствии с заданным коэффициентом сдвига shear, который представляет собой тангенс угла сдвига. При этом не изменяется направление движения черепахи. Если shear не указан, возвращает текущий коэффициент сдвига, то есть тангенс угла сдвига, на который сдвигаются линии, параллельные направлению движения черепахи.
>>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.shearfactor(0.5) >>> turtle.shearfactor() 0.5
-
turtle.tilt(angle) -
- Параметры:
-
angle — число
Поворачивает фигуру черепахи на angle относительно текущего угла наклона, но не изменяет направление движения черепахи.
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.tilt(30) >>> turtle.fd(50) >>> turtle.tilt(30) >>> turtle.fd(50)
-
turtle.settiltangle(angle) -
- Параметры:
-
angle — число
Поворачивает фигуру черепахи в направлении, заданном значением angle, независимо от текущего угла наклона. Не изменяет направление движения черепахи.
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.settiltangle(45) >>> turtle.fd(50) >>> turtle.settiltangle(-45) >>> turtle.fd(50)Устарело с версии 3.1.
-
turtle.tiltangle(angle=None) -
- Параметры:
-
angle — число (необязательно)
Задает или возвращает текущий угол наклона. Если задано значение angle, поворачивает фигуру черепахи в направлении, заданном этим значением, независимо от текущего угла наклона. При этом не изменяется направление движения черепахи. Если angle не указан, возвращает текущий угол наклона, то есть угол между ориентацией фигуры черепахи и направлением движения черепахи.
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.tilt(45) >>> turtle.tiltangle() 45.0
-
turtle.shapetransform(t11=None, t12=None, t21=None, t22=None) -
- Параметры:
-
- t11 — число (необязательно)
- t12 — число (необязательно)
- t21 — число (необязательно)
- t12 — число (необязательно)
Задает или возвращает текущую матрицу преобразования фигуры черепахи.
Если ни один из элементов матрицы не указан, возвращает матрицу преобразования в виде кортежа из 4 элементов. В противном случае задает указанные элементы и преобразует фигуру черепахи в соответствии с матрицей, состоящей из первой строки t11, t12 и второй строки t21, t22. Определитель t11 * t22 - t12 * t21 не должен быть равен нулю, иначе возникнет ошибка. В соответствии с заданной матрицей изменяются коэффициент растяжения, коэффициент сдвига и угол наклона.
>>> turtle = Turtle() >>> turtle.shape("square") >>> turtle.shapesize(4,2) >>> turtle.shearfactor(-0.5) >>> turtle.shapetransform() (4.0, -1.0, -0.0, 2.0)
-
turtle.get_shapepoly() -
Возвращает текущий многоугольник фигуры в виде кортежа пар координат. Его можно использовать для определения новой фигуры или компонентов составной фигуры.
>>> turtle.shape("square") >>> turtle.shapetransform(4, -1, 0, 2) >>> turtle.get_shapepoly() ((50, -20), (30, 20), (-50, 20), (-30, -20))
Использование событий
- turtle.onclick(fun, btn=1, add=None)
-
- Параметры:
-
- fun — функция с двумя аргументами, которая будет вызвана с координатами точки на холсте, по которой щелкнули
- btn — номер кнопки мыши; по умолчанию 1 (левая кнопка мыши)
-
add —
TrueилиFalse— еслиTrue, будет добавлена новая привязка, в противном случае она заменит предыдущую
Привязывает fun к событиям щелчка мышью по этой черепахе. Если fun равен
None, существующие привязки удаляются. Пример для анонимной черепахи, то есть процедурного способа:>>> def turn(x, y): ... left(180) ... >>> onclick(turn) # Now clicking into the turtle will turn it. >>> onclick(None) # event-binding will be removed
-
turtle.onrelease(fun, btn=1, add=None) -
- Параметры:
-
- fun — функция с двумя аргументами, которая будет вызвана с координатами точки на холсте, по которой щелкнули
- btn — номер кнопки мыши; по умолчанию 1 (левая кнопка мыши)
-
add —
TrueилиFalse— еслиTrue, будет добавлена новая привязка, в противном случае она заменит предыдущую
Привязывает fun к событиям отпускания кнопки мыши над этой черепахой. Если fun равен
None, существующие привязки удаляются.>>> class MyTurtle(Turtle): ... def glow(self,x,y): ... self.fillcolor("red") ... def unglow(self,x,y): ... self.fillcolor("") ... >>> turtle = MyTurtle() >>> turtle.onclick(turtle.glow) # clicking on turtle turns fillcolor red, >>> turtle.onrelease(turtle.unglow) # releasing turns it to transparent.
-
turtle.ondrag(fun, btn=1, add=None) -
- Параметры:
-
- fun — функция с двумя аргументами, которая будет вызвана с координатами точки на холсте, по которой щелкнули
- btn — номер кнопки мыши; по умолчанию 1 (левая кнопка мыши)
-
add —
TrueилиFalse— еслиTrue, будет добавлена новая привязка, в противном случае она заменит предыдущую
Привязывает fun к событиям перемещения мыши над этой черепахой. Если fun равен
None, существующие привязки удаляются.Примечание: каждой последовательности событий перемещения мыши над черепахой предшествует событие щелчка мышью по этой черепахе.
>>> turtle.ondrag(turtle.goto)
После этого щелчок и перетаскивание черепахи будут перемещать её по экрану, оставляя рисунок от руки (если перо опущено).
Специальные методы Turtle
-
turtle.begin_poly() -
Начинает запись вершин многоугольника. Текущая позиция черепахи становится первой вершиной многоугольника.
-
turtle.end_poly() -
Останавливает запись вершин многоугольника. Текущая позиция черепахи становится последней вершиной многоугольника. Она будет соединена с первой вершиной.
-
turtle.get_poly() -
Возвращает последний записанный многоугольник.
>>> turtle.home() >>> turtle.begin_poly() >>> turtle.fd(100) >>> turtle.left(20) >>> turtle.fd(30) >>> turtle.left(60) >>> turtle.fd(50) >>> turtle.end_poly() >>> p = turtle.get_poly() >>> register_shape("myFavouriteShape", p)
-
turtle.clone() -
Создает и возвращает копию черепахи с теми же позицией, направлением и свойствами.
>>> mick = Turtle() >>> joe = mick.clone()
-
turtle.getturtle() -
turtle.getpen() -
Возвращает сам объект Turtle. Единственное осмысленное применение — функция для возврата «анонимной черепахи»:
>>> pet = getturtle() >>> pet.fd(50) >>> pet <turtle.Turtle object at 0x...>
-
turtle.getscreen() -
Возвращает объект
TurtleScreen, на котором черепаха рисует. Затем для этого объекта можно вызывать методы TurtleScreen.>>> ts = turtle.getscreen() >>> ts <turtle._Screen object at 0x...> >>> ts.bgcolor("pink")
-
turtle.setundobuffer(size) -
- Параметры:
-
size — целое число или
None
Задает или отключает буфер отмены действий. Если size — целое число, создается пустой буфер отмены указанного размера. size задает максимальное количество действий черепахи, которые можно отменить с помощью метода/функции
undo(). Если size равенNone, буфер отмены отключается.>>> turtle.setundobuffer(42)
-
turtle.undobufferentries() -
Возвращает количество записей в буфере отмены.
>>> while undobufferentries(): ... undo()
Составные фигуры
Чтобы использовать составные фигуры черепахи, состоящие из нескольких многоугольников разных цветов, необходимо явно использовать вспомогательный класс Shape, как описано ниже:
- Создайте пустой объект Shape типа “compound”.
-
Добавьте к этому объекту необходимое количество компонентов с помощью метода
addcomponent().Например:
>>> s = Shape("compound") >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5)) >>> s.addcomponent(poly1, "red", "blue") >>> poly2 = ((0,0),(10,-5),(-10,-5)) >>> s.addcomponent(poly2, "blue", "red") -
Теперь добавьте Shape в список фигур Screen и используйте его:
>>> register_shape("myshape", s) >>> shape("myshape")
Примечание
Класс Shape используется внутри метода register_shape() разными способами. Разработчику приложения нужно работать с классом Shape только при использовании составных фигур, как показано выше!
Методы TurtleScreen/Screen и соответствующие функции
Большинство примеров в этом разделе относятся к экземпляру TurtleScreen с именем screen.
Управление окном
-
turtle.bgcolor(*args) -
- Параметры:
-
args – строка с названием цвета, три числа в диапазоне 0..colormode или кортеж из трёх таких чисел
Установить или вернуть цвет фона TurtleScreen.
>>> screen.bgcolor("orange") >>> screen.bgcolor() 'orange' >>> screen.bgcolor("#800080") >>> screen.bgcolor() (128.0, 0.0, 128.0)
-
turtle.bgpic(picname=None) -
- Параметры:
-
picname – строка, имя gif-файла,
"nopic"илиNone
Установить фоновое изображение или вернуть имя текущего фонового изображения. Если picname — имя файла, установить соответствующее изображение в качестве фона. Если picname —
"nopic", удалить фоновое изображение, если оно есть. Если picname —None, вернуть имя файла текущего фонового изображения.>>> screen.bgpic() 'nopic' >>> screen.bgpic("landscape.gif") >>> screen.bgpic() "landscape.gif"
- turtle.clear()
-
Примечание
Этот метод TurtleScreen доступен в качестве глобальной функции только под именем
clearscreen. Глобальная функцияclear— другая функция, производная от метода Turtleclear.
-
turtle.clearscreen() -
Удалить все рисунки и всех черепах с TurtleScreen. Сбросить теперь пустой TurtleScreen в исходное состояние: белый фон, отсутствие фонового изображения и привязок событий, трассировка включена.
- turtle.reset()
-
Примечание
Этот метод TurtleScreen доступен в качестве глобальной функции только под именем
resetscreen. Глобальная функцияreset— другая функция, производная от метода Turtlereset.
-
turtle.resetscreen() -
Сбросить всех черепах на экране в исходное состояние.
-
turtle.screensize(canvwidth=None, canvheight=None, bg=None) -
- Параметры:
-
- canvwidth – положительное целое число, новая ширина холста в пикселях
- canvheight – положительное целое число, новая высота холста в пикселях
- bg – строка с названием цвета или кортеж цвета, новый цвет фона
Если аргументы не указаны, вернуть текущие значения (canvaswidth, canvasheight). В противном случае изменить размер холста, на котором черепахи рисуют. Не изменять размер окна рисования. Чтобы просмотреть скрытые части холста, используйте полосы прокрутки. Этот метод позволяет сделать видимыми части рисунка, которые ранее находились за пределами холста.
>>> screen.screensize() (400, 300) >>> screen.screensize(2000,1500) >>> screen.screensize() (2000, 1500)
например, чтобы отыскать черепаху, которая по ошибке сбежала ;-)
-
turtle.setworldcoordinates(llx, lly, urx, ury) -
- Параметры:
-
- llx – число, координата x нижнего левого угла холста
- lly – число, координата y нижнего левого угла холста
- urx – число, координата x верхнего правого угла холста
- ury – число, координата y верхнего правого угла холста
Задать пользовательскую систему координат и при необходимости переключиться в режим «world». При этом выполняется
screen.reset(). Если режим «world» уже активен, все рисунки перерисовываются с учётом новых координат.ВНИМАНИЕ: в пользовательских системах координат углы могут выглядеть искажёнными.
>>> screen.reset() >>> screen.setworldcoordinates(-50,-7.5,50,7.5) >>> for _ in range(72): ... left(10) ... >>> for _ in range(8): ... left(45); fd(2) # a regular octagon
Управление анимацией
-
turtle.delay(delay=None) -
- Параметры:
-
delay – положительное целое число
Установить или вернуть задержку рисования в миллисекундах. (Это приблизительный интервал времени между двумя последовательными обновлениями холста.) Чем больше задержка рисования, тем медленнее анимация.
Необязательный аргумент:
>>> screen.delay() 10 >>> screen.delay(5) >>> screen.delay() 5
-
turtle.tracer(n=None, delay=None) -
- Параметры:
-
- n – неотрицательное целое число
- delay – неотрицательное целое число
Включить или выключить анимацию черепахи и задать задержку обновления рисунков. Если задано n, фактически выполняется только каждое n-е обычное обновление экрана. (Можно использовать для ускорения рисования сложной графики.) При вызове без аргументов возвращает текущее сохранённое значение n. Второй аргумент задаёт задержку (см.
delay()).>>> screen.tracer(8, 25) >>> dist = 2 >>> for i in range(200): ... fd(dist) ... rt(90) ... dist += 2
-
turtle.update() -
Обновить TurtleScreen. Используется, когда трассировка отключена.
См. также метод RawTurtle/Turtle speed().
Использование событий экрана
-
turtle.listen(xdummy=None, ydummy=None) -
Установить фокус на TurtleScreen (чтобы принимать события клавиатуры). Передаются фиктивные аргументы, чтобы можно было передать
listen()методу onclick.
-
turtle.onkey(fun, key) -
turtle.onkeyrelease(fun, key) -
- Параметры:
-
-
fun – функция без аргументов или
None - key – строка: клавиша (например, «a») или символ клавиши (например, «space»)
-
fun – функция без аргументов или
Связать fun с событием отпускания клавиши key. Если fun —
None, привязки событий удаляются. Примечание: чтобы зарегистрировать события клавиатуры, TurtleScreen должен иметь фокус. (См. методlisten().)>>> def f(): ... fd(50) ... lt(60) ... >>> screen.onkey(f, "Up") >>> screen.listen()
-
turtle.onkeypress(fun, key=None) -
- Параметры:
-
-
fun – функция без аргументов или
None - key – строка: клавиша (например, «a») или символ клавиши (например, «space»)
-
fun – функция без аргументов или
Связать fun с событием нажатия клавиши key, если клавиша указана, или с событием нажатия любой клавиши, если клавиша не указана. Примечание: чтобы зарегистрировать события клавиатуры, TurtleScreen должен иметь фокус. (См. метод
listen().)>>> def f(): ... fd(50) ... >>> screen.onkey(f, "Up") >>> screen.listen()
-
turtle.onclick(fun, btn=1, add=None) -
turtle.onscreenclick(fun, btn=1, add=None) -
- Параметры:
-
- fun – функция с двумя аргументами, которой будут переданы координаты точки на холсте, по которой щёлкнули
- btn – номер кнопки мыши, по умолчанию 1 (левая кнопка мыши)
-
add –
TrueилиFalse– еслиTrue, будет добавлена новая привязка, в противном случае она заменит предыдущую
Связать fun с событиями щелчка мышью на этом экране. Если fun —
None, существующие привязки удаляются.Пример для экземпляра TurtleScreen с именем
screenи экземпляра Turtle с именемturtle:>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will >>> # make the turtle move to the clicked point. >>> screen.onclick(None) # remove event binding again
Примечание
Этот метод TurtleScreen доступен в качестве глобальной функции только под именем
onscreenclick. Глобальная функцияonclick— другая функция, производная от метода Turtleonclick.
-
turtle.ontimer(fun, t=0) -
- Параметры:
-
- fun – функция без аргументов
- t – число >= 0
Установить таймер, который вызовет fun через t миллисекунд.
>>> running = True >>> def f(): ... if running: ... fd(50) ... lt(60) ... screen.ontimer(f, 250) >>> f() ### makes the turtle march around >>> running = False
-
turtle.mainloop() -
turtle.done() -
Запустить цикл обработки событий — вызвать функцию Tkinter mainloop. Это должно быть последней инструкцией в программе с черепашьей графикой. Не следует использовать её, если скрипт запущен из IDLE в режиме -n (без подпроцесса) для интерактивной работы с черепашьей графикой.
>>> screen.mainloop()
Методы ввода
-
turtle.textinput(title, prompt) -
- Параметры:
-
- title – строка
- prompt – строка
Открыть диалоговое окно для ввода строки. Параметр title задаёт заголовок диалогового окна, prompt — текст, обычно описывающий, какую информацию нужно ввести. Вернуть введённую строку. Если диалоговое окно отменено, вернуть
None.>>> screen.textinput("NIM", "Name of first player:")
-
turtle.numinput(title, prompt, default=None, minval=None, maxval=None) -
- Параметры:
-
- title – строка
- prompt – строка
- default – число (необязательно)
- minval – число (необязательно)
- maxval – число (необязательно)
Открыть диалоговое окно для ввода числа. title задаёт заголовок диалогового окна, prompt — текст, обычно описывающий, какое числовое значение нужно ввести. default: значение по умолчанию, minval: минимальное значение для ввода, maxval: максимальное значение для ввода. Если указаны minval и maxval, введённое число должно находиться в диапазоне minval .. maxval. В противном случае выводится подсказка, а диалоговое окно остаётся открытым, чтобы исправить значение. Вернуть введённое число. Если диалоговое окно отменено, вернуть
None.>>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)
Настройки и специальные методы
-
turtle.mode(mode=None) -
- Параметры:
-
mode – одна из строк «standard», «logo» или «world»
Установить режим черепахи («standard», «logo» или «world») и выполнить сброс. Если режим не указан, возвращается текущий режим.
Режим «standard» совместим со старым
turtle. Режим «logo» совместим с большинством вариантов черепашьей графики Logo. В режиме «world» используются пользовательские «мировые координаты». Внимание: в этом режиме углы выглядят искажёнными, если единичное соотношениеx/yне равно 1.Режим
Начальное направление черепахи
Положительные углы
«standard»
вправо (на восток)
против часовой стрелки
«logo»
вверх (на север)
по часовой стрелке
>>> mode("logo") # resets turtle heading to north >>> mode() 'logo'
-
turtle.colormode(cmode=None) -
- Параметры:
-
cmode – одно из значений 1.0 или 255
Вернуть режим цвета или установить его значение равным 1.0 или 255. После этого значения r, g, b в кортежах цветов должны находиться в диапазоне 0..*cmode*.
>>> screen.colormode(1) >>> turtle.pencolor(240, 160, 80) Traceback (most recent call last): ... TurtleGraphicsError: bad color sequence: (240, 160, 80) >>> screen.colormode() 1.0 >>> screen.colormode(255) >>> screen.colormode() 255 >>> turtle.pencolor(240,160,80)
-
turtle.getcanvas() -
Вернуть Canvas этого TurtleScreen. Полезно для тех, кто знает, что делать с Canvas Tkinter.
>>> cv = screen.getcanvas() >>> cv <turtle.ScrolledCanvas object ...>
-
turtle.getshapes() -
Вернуть список имён всех доступных в данный момент форм черепахи.
>>> screen.getshapes() ['arrow', 'blank', 'circle', ..., 'turtle']
-
turtle.register_shape(name, shape=None) -
turtle.addshape(name, shape=None) -
Эту функцию можно вызвать тремя разными способами:
-
name — имя gif-файла, а shape —
None: установить соответствующую форму изображения.>>> screen.register_shape("turtle.gif")Примечание
Формы-изображения не поворачиваются при повороте черепахи, поэтому они не показывают её направление!
-
name — произвольная строка, а shape — кортеж пар координат: установить соответствующую форму многоугольника.
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3))) -
name — произвольная строка, а shape — объект
Shape(составной формы): установить соответствующую составную форму.
Добавить форму черепахи в список форм TurtleScreen. Использовать можно только формы, зарегистрированные таким образом с помощью команды
shape(shapename). -
-
turtle.turtles() -
Вернуть список черепах на экране.
>>> for turtle in screen.turtles(): ... turtle.color("red")
-
turtle.window_height() -
Вернуть высоту окна черепахи.
>>> screen.window_height() 480
-
turtle.window_width() -
Вернуть ширину окна черепахи.
>>> screen.window_width() 640
Методы Screen, не унаследованные от TurtleScreen
-
turtle.bye() -
Закрыть окно черепашьей графики.
-
turtle.exitonclick() -
Связать метод
bye()со щелчками мыши на Screen.Если значение «using_IDLE» в словаре конфигурации равно
False(значение по умолчанию), также запустить mainloop. Примечание: если используется IDLE с параметром-n(без подпроцесса), это значение следует установить вTrueвturtle.cfg. В этом случае собственный цикл mainloop IDLE также активен для клиентского скрипта.
-
turtle.setup(width=_CFG['width'], height=_CFG['height'], startx=_CFG['leftright'], starty=_CFG['topbottom']) -
Задать размер и положение главного окна. Значения аргументов по умолчанию хранятся в словаре конфигурации и могут быть изменены с помощью файла
turtle.cfg.- Параметры:
-
- width – если целое число, размер в пикселях; если число с плавающей точкой, доля экрана; по умолчанию 50% экрана
- height – если целое число, высота в пикселях; если число с плавающей точкой, доля экрана; по умолчанию 75% экрана
-
startx – если положительное, начальное положение в пикселях от левого края экрана; если отрицательное — от правого края; если
None, расположить окно по центру по горизонтали -
starty – если положительное, начальное положение в пикселях от верхнего края экрана; если отрицательное — от нижнего края; если
None, расположить окно по центру по вертикали
>>> screen.setup (width=200, height=200, startx=0, starty=0) >>> # sets window to 200x200 pixels, in upper left of screen >>> screen.setup(width=.75, height=0.5, startx=None, starty=None) >>> # sets window to 75% of screen by 50% of screen and centers
-
turtle.title(titlestring) -
- Параметры:
-
titlestring – строка, отображаемая в заголовке окна черепашьей графики
Установить для окна черепахи заголовок titlestring.
>>> screen.title("Welcome to the turtle zoo!")
Общедоступные классы
-
class turtle.RawTurtle(canvas) -
class turtle.RawPen(canvas) -
- Параметры:
-
canvas –
tkinter.Canvas,ScrolledCanvasилиTurtleScreen
Создать черепаху. Черепаха имеет все методы, описанные выше как «методы Turtle/RawTurtle».
-
class turtle.Turtle -
Подкласс RawTurtle с тем же интерфейсом, но рисующий на стандартном объекте
Screen, который автоматически создаётся при первой необходимости.
-
class turtle.TurtleScreen(cv) -
- Параметры:
-
cv –
tkinter.Canvas
Предоставляет методы, относящиеся к экрану, например
bgcolor(), описанные выше.
-
class turtle.Screen -
Подкласс TurtleScreen с четырьмя дополнительными методами.
-
class turtle.ScrolledCanvas(master) -
- Параметры:
-
master – виджет Tkinter, содержащий ScrolledCanvas, то есть холст Tkinter с полосами прокрутки
Используется классом Screen, который благодаря этому автоматически предоставляет ScrolledCanvas в качестве рабочей области для черепах.
-
class turtle.Shape(type_, data) -
- Параметры:
-
type_ – одна из строк «polygon», «image», «compound»
Структура данных для представления форм. Пара
(type_, data)должна соответствовать следующей спецификации:type_
data
«polygon»
кортеж многоугольника, то есть кортеж пар координат
«image»
изображение (в таком виде используется только внутри программы!)
«compound»
None(составную форму необходимо создать с помощью методаaddcomponent())-
addcomponent(poly, fill, outline=None) -
- Параметры:
-
- poly – многоугольник, то есть кортеж пар чисел
- fill – цвет заливки poly
- outline – цвет контура poly (если указан)
Пример:
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5)) >>> s = Shape("compound") >>> s.addcomponent(poly, "red", "blue") >>> # ... add more components and then use register_shape()См. раздел Составные формы.
-
class turtle.Vec2D(x, y) -
Класс двумерных векторов, используемый как вспомогательный класс для реализации черепашьей графики. Может быть полезен и в программах черепашьей графики. Производный от tuple, поэтому вектор является кортежем!
Предоставляет (для векторов a, b и числа k):
-
a + bсложение векторов -
a - bвычитание векторов -
a * bскалярное произведение -
k * aиa * kумножение на скаляр -
abs(a)абсолютное значение a -
a.rotate(angle)поворот
-
Пояснения
Объект-черепаха рисует на объекте-экране. В объектно-ориентированном интерфейсе turtle есть несколько ключевых классов, с помощью которых можно создавать эти объекты и связывать их друг с другом.
Экземпляр Turtle автоматически создаёт экземпляр Screen, если таковой ещё не существует.
Turtle — подкласс RawTurtle, который не создаёт поверхность для рисования автоматически: для него нужно предоставить или создать холст. Холстом может быть tkinter.Canvas, ScrolledCanvas или TurtleScreen.
TurtleScreen — основная поверхность для рисования черепахи. Screen — подкласс TurtleScreen, включающий дополнительные методы для управления внешним видом (в том числе размером и заголовком) и поведением экрана. В конструктор TurtleScreen в качестве аргумента нужно передать tkinter.Canvas или ScrolledCanvas.
Функциональный интерфейс черепашьей графики использует различные методы Turtle и TurtleScreen/Screen. Внутри программы объект экрана автоматически создаётся при вызове любой функции, производной от метода Screen. Аналогично, объект черепахи автоматически создаётся при вызове любой функции, производной от метода Turtle.
Чтобы использовать на экране несколько черепах, необходимо применять объектно-ориентированный интерфейс.
Справка и настройка
Как пользоваться справкой
Общедоступные методы классов Screen и Turtle подробно документированы с помощью строк документации. Поэтому их можно использовать как интерактивную справку средствами Python:
- При работе в IDLE всплывающие подсказки показывают сигнатуры и первые строки строк документации для вводимых вызовов функций и методов.
-
Вызов
help()для методов или функций отображает строки документации:>>> help(Screen.bgcolor) Help on method bgcolor in module turtle: bgcolor(self, *args) unbound turtle.Screen method Set or return backgroundcolor of the TurtleScreen. Arguments (if given): a color string or three numbers in the range 0..colormode or a 3-tuple of such numbers. >>> screen.bgcolor("orange") >>> screen.bgcolor() "orange" >>> screen.bgcolor(0.5,0,0.5) >>> screen.bgcolor() "#800080" >>> help(Turtle.penup) Help on method penup in module turtle: penup(self) unbound turtle.Turtle method Pull the pen up -- no drawing when moving. Aliases: penup | pu | up No argument >>> turtle.penup() -
Строки документации функций, производных от методов, имеют изменённую форму:
>>> help(bgcolor) Help on function bgcolor in module turtle: bgcolor(*args) Set or return backgroundcolor of the TurtleScreen. Arguments (if given): a color string or three numbers in the range 0..colormode or a 3-tuple of such numbers. Example:: >>> bgcolor("orange") >>> bgcolor() "orange" >>> bgcolor(0.5,0,0.5) >>> bgcolor() "#800080" >>> help(penup) Help on function penup in module turtle: penup() Pull the pen up -- no drawing when moving. Aliases: penup | pu | up No argument Example: >>> penup()
Эти изменённые строки документации создаются автоматически во время импорта вместе с определениями функций, производных от методов.
Перевод строк документации на разные языки
Существует утилита для создания словаря, в котором ключами служат имена методов, а значениями — строки документации общедоступных методов классов Screen и Turtle.
-
turtle.write_docstringdict(filename='turtle_docstringdict') -
- Параметры:
-
filename — строка, используемая в качестве имени файла
Создаёт словарь строк документации и записывает его в скрипт Python с указанным именем файла. Эту функцию нужно вызывать явно (она не используется классами графики черепахи). Словарь строк документации будет записан в скрипт Python
filename.py. Он предназначен для использования в качестве шаблона при переводе строк документации на разные языки.
Если вы (или ваши ученики) хотите использовать turtle с интерактивной справкой на родном языке, нужно перевести строки документации и сохранить полученный файл, например, как turtle_docstringdict_german.py.
Если в файле turtle.cfg есть соответствующая запись, этот словарь будет загружен во время импорта и заменит исходные строки документации на английском языке.
На момент написания этого текста словари строк документации доступны на немецком и итальянском языках. (По вопросам обращайтесь по адресу glingl@aon.at.)
Как настроить Screen и Turtle
Встроенная конфигурация по умолчанию имитирует внешний вид и поведение старого модуля turtle, чтобы обеспечить с ним максимально возможную совместимость.
Если вы хотите использовать другую конфигурацию, которая лучше отражает возможности этого модуля или больше подходит для ваших задач, например для занятий в классе, можно подготовить файл конфигурации turtle.cfg. Он будет прочитан во время импорта, а конфигурация изменится в соответствии с его настройками.
Встроенная конфигурация соответствует следующему turtle.cfg:
width = 0.5 height = 0.75 leftright = None topbottom = None canvwidth = 400 canvheight = 300 mode = standard colormode = 1.0 delay = 10 undobuffersize = 1000 shape = classic pencolor = black fillcolor = black resizemode = noresize visible = True language = english exampleturtle = turtle examplescreen = screen title = Python Turtle Graphics using_IDLE = False
Краткое пояснение отдельных записей:
- Первые четыре строки соответствуют аргументам метода
Screen.setup. - Строки 5 и 6 соответствуют аргументам метода
Screen.screensize. -
shape может принимать любое из встроенных значений формы, например arrow, turtle и т. д. Дополнительную информацию можно получить с помощью
help(shape). - Если вы хотите не использовать цвет заливки (то есть сделать черепаху прозрачной), укажите
fillcolor = ""(при этом все непустые строки в файле cfg должны быть без кавычек). - Чтобы отображать состояние черепахи, укажите
resizemode = auto. - Если задать, например,
language = italian, словарь строк документацииturtle_docstringdict_italian.pyбудет загружен во время импорта (если он есть в пути импорта, например в том же каталоге, что иturtle). - Записи exampleturtle и examplescreen задают имена этих объектов, используемые в строках документации. При преобразовании строк документации методов в строки документации функций эти имена удаляются.
-
using_IDLE: задайте значение
True, если вы регулярно работаете в IDLE с переключателем-n(«без подпроцесса»). Это предотвратит запуск главного цикла вызовомexitonclick().
Файл turtle.cfg может находиться в каталоге, где хранится turtle, а ещё один такой файл — в текущем рабочем каталоге. Настройки последнего файла переопределяют настройки первого.
Каталог Lib/turtledemo содержит файл turtle.cfg. Вы можете изучить его как пример и посмотреть, как он влияет на работу демонстраций (желательно запускать их не из средства просмотра демонстраций).
turtledemo — демонстрационные скрипты
Пакет turtledemo содержит набор демонстрационных скриптов. Их можно запускать и просматривать с помощью поставляемого средства просмотра демонстраций следующим образом:
python -m turtledemo
Также демонстрационные скрипты можно запускать по отдельности. Например:
python -m turtledemo.bytedesign
Каталог пакета turtledemo содержит:
- Средство просмотра демонстраций
__main__.py, позволяющее просматривать исходный код скриптов и одновременно запускать их. - Несколько скриптов, демонстрирующих различные возможности модуля
turtle. Примеры доступны в меню Examples. Их также можно запускать отдельно. - Файл
turtle.cfg, который служит примером создания и использования таких файлов.
Демонстрационные скрипты:
Название | Описание | Возможности |
|---|---|---|
bytedesign | сложный классический узор в графике черепахи | |
chaos | строит графики динамики Ферхюльста и показывает, что вычисления компьютера иногда могут давать результаты, противоречащие здравому смыслу | мировые координаты |
clock | аналоговые часы, показывающие время на вашем компьютере | черепахи в роли стрелок часов, ontimer |
colormixer | эксперименты с r, g, b | |
forest | 3 дерева с обходом в ширину | рандомизация |
fractalcurves | кривые Гильберта и Коха | рекурсия |
lindenmayer | этноматематика (индийские коламы) | L-система |
minimal_hanoi | Ханойские башни | прямоугольные черепахи в роли дисков для Ханойских башен (shape, shapesize) |
nim | игра в классическую ним с тремя кучами палочек против компьютера | черепахи в роли палочек ним, управление событиями (мышь, клавиатура) |
paint | предельно минималистичная программа для рисования | |
peace | простой пример | черепаха: внешний вид и анимация |
penrose | апериодическая мозаика из воздушных змеев и дротиков | |
planet_and_moon | моделирование гравитационной системы | составные формы, |
rosette | узор из статьи о графике черепахи в Википедии | |
round_dance | танцующие черепахи, попарно вращающиеся в противоположных направлениях | составные формы, clone, shapesize, tilt, get_shapepoly, update |
sorting_animate | наглядная демонстрация различных методов сортировки | простое выравнивание, рандомизация |
tree | дерево с обходом в ширину (графическое, использует генераторы) | |
two_canvases | простой узор | черепахи на двух холстах |
yinyang | ещё один простой пример |
Приятного изучения!
Изменения по сравнению с Python 2.6
- Методы
Turtle.tracer,Turtle.window_widthиTurtle.window_heightудалены. Методы с такими именами и функциями теперь доступны только как методыScreen. Производные от них функции по-прежнему доступны. (На самом деле уже в Python 2.6 эти методы лишь дублировали соответствующие методыTurtleScreen/Screen.) - Метод
Turtle.fill()удалён. Поведениеbegin_fill()иend_fill()немного изменилось: теперь каждый процесс заливки необходимо завершать вызовомend_fill(). - Добавлен метод
Turtle.filling. Он возвращает логическое значение:True, если процесс заливки выполняется, иFalseв противном случае. Такое поведение соответствует вызовуfill()без аргументов в Python 2.6.
Изменения по сравнению с Python 3.0
- В класс
Turtleдобавлены методыshearfactor(),shapetransform()иget_shapepoly(). Теперь доступны все виды линейных преобразований для изменения форм черепах. Функциональность методаtiltangle()расширена: теперь с его помощью можно получать и задавать угол наклона. Методsettiltangle()признан устаревшим. - В класс
Screenдобавлен методonkeypress()в дополнение кonkey(). Поскольку последний связывает действия с событием отпускания клавиши, для него также добавлен псевдонимonkeyrelease(). - Добавлен метод
Screen.mainloop, поэтому при работе с объектамиScreenиTurtleбольше нет необходимости использовать отдельную функциюmainloop(). - Добавлены два метода ввода:
Screen.textinputиScreen.numinput. Они открывают диалоговые окна ввода и возвращают соответственно строки и числа. - В каталог
Lib/turtledemoдобавлены два демонстрационных скрипта:tdemo_nim.pyиtdemo_round_dance.py.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/turtle.html