Python turtle end_poly () не работает - PullRequest
0 голосов
/ 16 мая 2018

Черепахи говорят, когда достигается end_poly():

Прекратить запись вершин многоугольника. Текущая позиция черепахи последняя вершина многоугольника. Это будет связано с первой вершиной.

В моем примере последняя линия не отрисовывается от последней вершины до первой вершины. Он действует одинаково в 2.7 и 3.7 Python.

from turtle import *

print("position 0:",position())
width(5)
pencolor("red")
fillcolor("blue")
begin_fill()
begin_poly()
fd(100)
print("position 1:",position())
left(90)
fd(100)
print("position 2:",position())
end_poly()
end_fill()

p = get_poly()
print("poly p:",p)
register_shape("myShape",p)
shapes_ = getshapes()
print("shapes_:", shapes_)

Выход:

position 0: (0.00,0.00)
position 1: (100.00,0.00)
position 2: (100.00,100.00)
poly p: ((0.00,0.00), (100.00,0.00), (100.00,100.00))
shapes_: ['arrow', 'blank', 'circle', 'classic', 'myShape', 'square', 'triangle', 'turtle']

Изображение многоугольника

1 Ответ

0 голосов
/ 16 мая 2018

Я считаю, что это ошибка в документации, но она понятна.

Во-первых, вы четко можете нарисовать то, что хотите, закрыв фигуру самостоятельно:

from turtle import Turtle, Screen

screen = Screen()
turtle = Turtle(visible=False)

turtle.width(5)
turtle.color("red", "blue")

position = turtle.position()

turtle.begin_fill()
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.goto(position)
turtle.end_fill()

screen.exitonclick()

Так что жесделка с полигонами?Что ж, если вы не реализуете код самостоятельно, по умолчанию черепаха ничего не может сделать с полигонами, кроме как использовать их в качестве курсоров черепах.В этом случае он передает их на tkinter, который отвечает за закрытие многоугольника:

from turtle import Turtle, Screen

screen = Screen()
turtle = Turtle(visible=False)
turtle.penup()

turtle.begin_poly()
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.end_poly()

screen.register_shape("myShape", turtle.get_poly())

turtle.shape("myShape")  # when the polygon gets closed
turtle.shapesize(outline=5)
turtle.color("red", "blue")

turtle.stamp()

screen.exitonclick()

(я предполагаю, что это в tkinter's canvas.coords(), где многоугольник закрывается.) Обратите внимание, что ваш width(5)ничего не значит в этом случае, а также *_fill(), поскольку ширина контура курсора устанавливается с помощью shapesize(), и курсор естественным образом заполнен.Ему не нужен цвет, указанный во время создания полигона, вы можете подождать, пока новый курсор не будет развернут.

Я считаю, что это утверждение в документации end_poly():

lastвершина многоугольника.Это будет связано с первой вершиной.

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

...