Python turtle end_poly()不起作用

时间:2018-05-16 02:02:13

标签: python turtle-graphics polygons

Turtle docs说到达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']

Image of polygon

1 个答案:

答案 0 :(得分:0)

我认为这是文档中的错误,但是可以理解的。

首先,您可以通过自己关闭图形来清楚地绘制出您想要的内容:

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的canvas.coords()多边形被关闭的地方。)请注意,width(5)在这种情况下没有任何意义,*_fill()也没有,因为光标的轮廓宽度是使用shapesize()设置,光标自然填充。它不需要在多边形创建时指定的颜色,您可以等到部署新光标。

我相信end_poly()文档中的这句话:

  

多边形的最后一个顶点。这将与第一个顶点连接。

应该真正驻留在turtle的register_shape()文档的多边形部分中。但是您可以理解错误,因为turtle只认为*_poly()的角色是用于创建新游标。而多边形应该是龟中的第一类灵活数据类型。