Сообщить об ошибке.

Графический модуль turtle в Python

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

Графический модуль turtle - популярный способ познакомить детей с программированием. Он был частью оригинального языка программирования Logo.

Представьте роботизированную черепаху, начинающуюся с точки (0, 0) в плоскости x/y. После импорта модуля turtle дайте ей команду turtle.forward(15), и она переместится (на экране!) на 15 пикселей в направлении, в котором смотрит, рисуя линию при движении. Дайте ей команду turtle.right(25), и она повернется на месте на 25 градусов по часовой стрелке.

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

Содержание:

Общие сведения и подходы работы с модулем.

Модуль turtle - это расширенная реализация одноименного модуля из стандартного дистрибутива Python до версии Python 2.5.

Он сохраняет достоинства старого модуля turtle и почти на 100% совместим с ним. Это означает, чтобы дать возможность обучающемуся программисту использовать все команды, классы и методы в интерактивном режиме при использовании модуля из IDLE, запущенного с ключом -n.

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

Объектно-ориентированный интерфейс использует по существу два + два класса:

  1. Класс TurtleScreen определяет графические окна как площадку для рисования. Его конструктору требуется аргумент tkinter.Canvas или ScrolledCanvas. Его следует использовать, когда черепаха используется как часть какого-либо приложения.

    Функция Screen() возвращает одноэлементный объект подкласса TurtleScreen. Эту функцию следует использовать, когда черепаха используется как автономный инструмент для создания графики. Как одноэлементный объект, наследование от его класса невозможно.

    Все методы TurtleScreen/Screen также существуют как функции, то есть как часть процедурно-ориентированного интерфейса.

  2. RawTurtle определяет объекты Turtle, которые рисуются на TurtleScreen. Его конструктору требуется аргумент Canvas, ScrolledCanvas или TurtleScreen, чтобы объекты RawTurtle знали, где рисовать.

    Производным от RawTurtle является подкласс Turtle, который использует экземпляр Screen, который создается автоматически, если еще не присутствует.

    Все методы RawTurtle/Turtle также существуют как функции, то есть как часть процедурно-ориентированного интерфейса.

Процедурный интерфейс предоставляет функции, производные от методов классов Screen и Turtle. Названия у них такие же, как у соответствующих методов. Объект экрана screen всегда создается автоматически, когда вызывается функция, производная от метода Screen. Безымянный объект turtle всегда создается автоматически, когда вызывается какая-либо из функций, производных от метода Turtle.

Чтобы использовать несколько черепах на экране, необходимо использовать объектно-ориентированный интерфейс.

Пример простого рисунка с модулем turtle.

Звезда "Turtle":

from turtle import *
color('red', 'yellow')
begin_fill()
while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break
end_fill()
done()

Файл конфигурации модуля 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().
  • Форма пера может быть любой из встроенных фигур, например, стрелка, черепаха и т. д. Для получения дополнительной информации попробуйте help(shape).
  • Если не хотите использовать цвет заливки (т.е. сделать черепаху прозрачной), то необходимо написать fillcolor = '' (при этом, в cfg-файле непустые строки не должны иметь кавычек).
  • Если необходимо отразить состояние модуля turtle, то необходимо использовать resizemode = auto.
  • Записи exampleturtle и examplescreen определяют имена этих объектов в том виде, в котором они встречаются в строках документации. Преобразование строк документации методов в строки документации функций удалит эти имена из строк документации.
  • using_IDLE: Установите значение True, если регулярно работаете с IDLE и его переключателем -n. Это предотвратит переход turtle.exitonclick() в основной цикл.

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

Пакет с примерами turtledemo.

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

python -m turtledemo

Кроме того, можно запускать демонстрационные скрипты индивидуально. Например,

python -m turtledemo.bytedesign

Каталог пакета turtledemo содержит:

  • Программу-просмотрщик __main__.py, которую можно использовать для просмотра исходного кода скриптов и их одновременного запуска.
  • Несколько скриптов, демонстрирующих различные функции модуля turtle. Доступ к примерам можно получить через меню "Examples". Их также можно запускать автономно.
  • Файл turtle.cfg, который служит примером того, как писать и использовать такие файлы.

ПРИМЕЧАНИЕ: Если запуск в терминале команды python -m turtledemo выдает /usr/bin/python: No module named turtledemo, то необходимо установить файлы примеров установленной версии Python. Например для Linux:

sudo apt install python3-examples idle3

И все заработает...

Установка поддержки Tk для Python3 (Tkinter) в Linux/X11.

Запустите оболочку Python (например, /usr/bin/python3) и проверьте импорт модуля turtle (например from turtle import *). Если при попытке импортировать turtle выводится сообщение об ошибке "ModuleNotFoundError: No module named 'tkinter'", то в большинстве случаев сообщение говорит о том, что нужно установить поддержку Tcl/Tk.

В основном дистрибутивы Linux выделяют поддержку Tkinter в отдельный пакет. Это избавляет от установки библиотек Tcl/Tk для людей, которые используют Python, но не используют Tkinter. Проще говоря, необходимо установить пакет с именем python3-tk, который и обеспечит установку и поддержку в системе соответствующих версий библиотек Tcl/Tk.

$ sudo apt install python3-tk

В данном случае этот пакет предоставляет библиотеки Tcl/Tk для использования с Python3.