Графика turtle Python: создание рисунков
Основы работы с Turtle
Как нарисовать простую линию с помощью turtle?
Модуль turtle входит в стандартную библиотеку Python и предназначен для создания растровых изображений с помощью управления черепашкой. Чтобы начать рисование, необходимо импортировать модуль, создать экран и объект черепашки. Пример:
import turtle
screen = turtle.Screen()
screen.title("Моя первая черепашка")
t = turtle.Turtle()
t.forward(100) # двигаемся вперед на 100 пикселей
screen.mainloop()Python turtle screen (работа с экраном в модуле turtle python)
После выполнения кода появится окно с линией. screen.mainloop() (или turtle.done()) необходимо для того, чтобы окно не закрылось сразу после отрисовки.
Типичная ошибка: забыть вызвать turtle.done(). В результате окно мгновенно закрывается, и пользователь не видит рисунка. Решение: всегда завершать программу вызовом turtle.done() или screen.mainloop().
Как нарисовать квадрат?
Повторяем команды перемещения и поворота. Используем цикл:
import turtle
t = turtle.Turtle()
for _ in range(4):
t.forward(100)
t.left(90)
turtle.done()Python turtle codes (коды для turtle в python)
Цель: освоить циклы для рисования правильных многоугольников. Данный подход пригодится для создания орнаментов и повторяющихся узоров.
Как нарисовать круг или дугу?
Команда circle(радиус) рисует окружность заданного радиуса. Для дуги передают дополнительный аргумент - угол в градусах.
import turtle
t = turtle.Turtle()
t.circle(50) # полный круг радиусом 50
t.penup()
t.goto(0, -100)
t.pendown()
t.circle(50, 180) # полукруг
turtle.done()
Turtle python goto (команда goto в модуле turtle python)
Цель: рисование дуг и окружностей. Используется в создании колес, солнц, аркадных игр.
Как изменить цвет и толщину линии?
Свойства pencolor, pensize и fillcolor управляют внешним видом.
import turtle
t = turtle.Turtle()
t.pensize(5)
t.pencolor("red")
t.fillcolor("yellow")
t.begin_fill()
for _ in range(3):
t.forward(100)
t.left(120)
t.end_fill()
turtle.done()графика turtle python (рисование с помощью модуля turtle в python)
Закрашиваем треугольник. begin_fill() и end_fill() создают заливку. Цель: оформление рисунков, выделение объектов.
Типичная ошибка: неправильное указание цвета (например, "red" написано с ошибкой). Решение: использовать стандартные имена из turtle.colormode() или RGB-кортежи.
Как управлять скоростью анимации?
Метод speed(0) отключает анимацию и рисует мгновенно. Значения от 1 (медленно) до 10 (быстро).
import turtle
t = turtle.Turtle()
t.speed(0) # максимальная скорость
for i in range(360):
t.forward(1)
t.left(1)
turtle.done()Python turtle точки (рисование точек с помощью turtle в python)
Рисуем спираль. Цель: быстрая отрисовка сложных фигур. Если скорость не задана, рисование идет с задержкой, что полезно для демонстрации.
Как использовать события клавиатуры?
С помощью screen.onkey() можно привязать функции к клавишам. Перед этим вызывается screen.listen().
import turtle
def move_forward():
t.forward(10)
def turn_left():
t.left(10)
def turn_right():
t.right(10)
screen = turtle.Screen()
t = turtle.Turtle()
screen.listen()
screen.onkey(move_forward, "Up")
screen.onkey(turn_left, "Left")
screen.onkey(turn_right, "Right")
screen.mainloop()Python turtle фигуры (какие фигуры можно нарисовать с помощью turtle в python)
Цель: создание интерактивных приложений и игр. Дополнительно можно обрабатывать мышь через screen.onclick().
Как сохранить рисунок?
Модуль turtle не предоставляет прямого сохранения в файл, но можно использовать screen.getcanvas().postscript(file="image.eps") для сохранения в векторный формат EPS.
import turtle
t = turtle.Turtle()
# рисуем что-нибудь
for _ in range(4):
t.forward(100)
t.left(90)
screen = turtle.Screen()
screen.getcanvas().postscript(file="square.eps")
turtle.done()Python turtle colors (цвета в модуле turtle python)
Цель: экспорт рисунка для дальнейшего использования. Также можно сделать скриншот окна сторонними средствами.
Проблема: формат EPS не всегда удобен. Решение: конвертировать в PNG или SVG с помощью дополнительных библиотек (например, Pillow).
Как рисовать несколько черепашек одновременно?
Создается несколько экземпляров Turtle. Каждая черепашка независима.
import turtle
t1 = turtle.Turtle()
t2 = turtle.Turtle()
t1.pencolor("blue")
t2.pencolor("red")
t1.forward(100)
t2.left(90)
t2.forward(100)
turtle.done()Turtle library python (основы работы с turtle)
Цель: создание многопоточных рисунков и анимаций. Важно помнить, что все черепашки действуют на одном экране.
Как использовать трассировку лучей?
С помощью tracer(0) можно отключать автоматическое обновление экрана, а затем обновлять его вручную через update(). Это ускоряет анимацию сложных сцен.
import turtle
screen = turtle.Screen()
screen.tracer(0)
t = turtle.Turtle()
for _ in range(100):
t.forward(10)
t.left(1)
screen.update() # обновляем экран после каждого шага
turtle.done()Цель: плавная анимация с контролем частоты кадров. Без update() экран останется пустым до вызова update().
Расширенные примеры и нестандартные решения
1. Фрактал «Дерево Пифагора»
Рекурсивное рисование ветвящегося дерева. Каждая ветка делится на две под меньшим углом.
import turtle
def draw_tree(branch_len, t):
if branch_len < 5:
return
t.forward(branch_len)
t.left(30)
draw_tree(branch_len * 0.7, t)
t.right(60)
draw_tree(branch_len * 0.7, t)
t.left(30)
t.backward(branch_len)
screen = turtle.Screen()
t = turtle.Turtle()
t.speed(0)
t.left(90)
t.up()
t.backward(200)
t.down()
draw_tree(100, t)
screen.mainloop()Результат: симметричное дерево с ветвями, уменьшающимися в масштабе. При branch_len менее 5 пикселей рекурсия останавливается.
2. Снежинка Коха
Классический фрактал, строящийся из равностороннего треугольника. Каждая сторона заменяется на «зубчатую» ломаную.
import turtle
def koch_curve(length, depth, t):
if depth == 0:
t.forward(length)
return
length /= 3
koch_curve(length, depth - 1, t)
t.left(60)
koch_curve(length, depth - 1, t)
t.right(120)
koch_curve(length, depth - 1, t)
t.left(60)
koch_curve(length, depth - 1, t)
screen = turtle.Screen()
screen.bgcolor("black")
t = turtle.Turtle()
t.speed(0)
t.pencolor("white")
t.up()
t.goto(-200, 100)
t.down()
for _ in range(3):
koch_curve(400, 4, t)
t.right(120)
screen.mainloop()Результат: снежинка с глубиной рекурсии 4. Чем больше глубина, тем мельче детали.
3. Спираль Фибоначчи
Рисование спирали на основе чисел Фибоначчи. Каждый следующий сегмент поворачивается на 90 градусов, его длина равна следующему числу Фибоначчи.
import turtle
def fib_spiral(n, t):
a, b = 0, 1
for i in range(n):
t.forward(b)
t.left(90)
a, b = b, a + b
screen = turtle.Screen()
t = turtle.Turtle()
t.speed(0)
t.up()
t.goto(-200, 0)
t.down()
fib_spiral(10, t)
screen.mainloop()Результат: спираль, состоящая из дуг (на самом деле из отрезков). При большом n спираль заполняет экран.
4. Интерактивная доска для рисования
Позволяет пользователю рисовать мышью, менять цвет и толщину линий.
import turtle
colors = ["red", "green", "blue", "yellow", "purple", "orange"]
color_index = 0
def change_color():
global color_index
color_index = (color_index + 1) % len(colors)
t.pencolor(colors[color_index])
def increase_size():
t.pensize(t.pensize() + 2)
def decrease_size():
if t.pensize() > 2:
t.pensize(t.pensize() - 2)
def drag_handler(x, y):
t.ondrag(None) # отключаем обработчик на время рисования
t.goto(x, y)
t.ondrag(drag_handler)
screen = turtle.Screen()
screen.setup(600, 600)
screen.title("Рисовалка")
t = turtle.Turtle()
t.speed(0)
t.pensize(5)
screen.listen()
screen.onkey(change_color, "c")
screen.onkey(increase_size, "plus")
screen.onkey(decrease_size, "minus")
t.ondrag(drag_handler)
screen.mainloop()Результат: окно, в котором можно водить мышью для рисования. Клавиша 'c' меняет цвет, '+' и '-' изменяют толщину.
5. Анимация вращающейся звезды
Использование ontimer для создания бесконечной анимации.
import turtle
import math
def draw_star(size, t):
for _ in range(5):
t.forward(size)
t.right(144)
def animate():
t.clear()
draw_star(100, t)
t.right(1)
screen.ontimer(animate, 50)
screen = turtle.Screen()
screen.tracer(0)
t = turtle.Turtle()
t.speed(0)
t.up()
t.goto(0, -50)
t.down()
animate()
screen.mainloop()Результат: звезда медленно вращается. Каждые 50 мс её угол поворота увеличивается на 1 градус.
6. Кривая дракона (фрактал)
Один из известных фракталов, порождаемый L-системой. Рекурсивная замена отрезков.
import turtle
def dragon_curve(length, depth, sign, t):
if depth == 0:
t.forward(length)
return
length /= 1.5
t.left(45 * sign)
dragon_curve(length, depth - 1, 1, t)
t.right(90 * sign)
dragon_curve(length, depth - 1, -1, t)
t.left(45 * sign)
screen = turtle.Screen()
t = turtle.Turtle()
t.speed(0)
t.up()
t.goto(-100, -50)
t.down()
t.left(90)
dragon_curve(100, 10, 1, t)
screen.mainloop()Результат: кривая, напоминающая дракона. При глубине 10 получается сложный узор.