Это тонкий, но здесь идет.Вы можете решить эту проблему, заменив:
ts = turtle.getscreen()
на:
ts = polygon.getscreen()
или:
ts = turtle.Screen()
и вернув обратно:
polygon.hideturtle()
Проблема в том, что getscreen()
- это метод turtle , поэтому при вызове его с именем модуля turtle.getscreen()
он применяется к default turtle.Он не только отображает экран, но и создает черепашку по умолчанию.Черепаха, которую вы видите на своем PostScript-изображении, - это не polygon
, а неименованная черепаха по умолчанию (ваша polygon
возвращает в исходное положение, по умолчанию черепаха начинается в исходном положении).Переключаясь на один из альтернативных вызовов выше, чтобы получить экран, вы не создаете экземпляр черепашки по умолчанию.Полное решение:
from turtle import Screen, Turtle
num_sides = 6
side_length = 70
angle = 360.0 / num_sides
screen = Screen()
polygon = Turtle()
for _ in range(num_sides):
polygon.forward(side_length)
polygon.right(angle)
polygon.hideturtle()
screen.getcanvas().postscript(file="hex_example.eps")
Это типичный сценарий, для которого я призываю людей импортировать черепаху, используя:
from turtle import Screen, Turtle
, поскольку он дает только объектно-ориентированный API для черепахи, а не другие типы импорта, такие как import turtle
или from turtle import *
, которые оставляют и объектно-ориентированный API и функциональность API активен.Активность обоих просто запутывает вещи.