在Turtle - Python 3.4中不设置动画?

2jcobegt  于 2023-01-27  发布在  Python
关注(0)|答案(3)|浏览(202)

下面的代码创建了一个分形树。我希望尽可能快地绘制它--我不希望出现任何动画,否则绘制时间会很长。在python的早期版本中,这是通过turtle.speed(0)实现的,如下所示。这在python 3.4中不起作用

import turtle
import random
red = 125
green = 70
blue = 38        
pen = 10
def tree(branchLen, t, red, green, blue, pen):
    if branchLen > 3:
        pen = pen*0.8
        t.pensize(pen)
        red = red - 15
        green = green + 8
    if branchLen > 5:
        angle = random.randrange(10, 70)
        angleTwo = 0.50*angle
        sub = (0.8*(random.randrange(1,24)))
        t.forward(branchLen)
        t.right(angleTwo)
        tree(branchLen-sub,t, red, green, blue, pen)
        t.left(angle)
        tree(branchLen-sub, t, red, green, blue, pen)
        t.right(angleTwo)
        t.backward(branchLen)

def main():
    t = turtle.Turtle()
    t.hideturtle()
    t.speed(0)
    myWin = turtle.Screen()
    t.left(90)
    t.up()
    t.backward(170)
    t.down()
    tree(random.randrange(40,47),t,red,green,blue, pen)
    myWin.exitonclick()

main()

在Python 3.4中,速度模块似乎没有做任何事情。无论使用什么数字(0-10),它总是相同的速度,并且不显示错误--这意味着它仍然是动画。
如何在Python 3.4中实现turtle无动画?http://interactivepython.org/runestone/static/pythonds/Recursion/graphical.html这是运行Python 2代码的好地方,只需用我的代码替换其中一个windows代码。

z0qdvdin

z0qdvdin1#

我认为使用turtle.tracer(False)会很有用,因为它忽略了动画。

gj3fmq9x

gj3fmq9x2#

首先,我建议使用speed('fastest')而不是speed(0),以明确你的意图;其次,在考虑tracer(False)之前,首先确保你的代码是最优的;最后,当你完成绘图时,总是使用tracer(True),因为如果不重新打开跟踪,一些操作将不会按预期的方式运行(例如,代码末尾的hideturtle())。
至于我的第二个建议,如果遵循逻辑,if branchLen > 3:if branchLen > 5:的组合没有什么真实的的区别,所以只需使用if branchLen > 5:。您传递颜色并操纵它们,但从未实际使用它们--如果您想要最佳速度,则丢弃不完整的代码。另外还有其他一些小的优化:

from turtle import Screen, Turtle
from random import randrange

PEN_SIZE = 8

def tree(branch_length, turtle, pen_size):
    if branch_length < 5:
        return

    angle = randrange(5, 35)
    double_angle = angle * 2
    sub_length = branch_length - randrange(1, 19)

    turtle.pensize(pen_size)
    pen_size *= 0.8

    turtle.forward(branch_length)
    turtle.right(angle)
    tree(sub_length, turtle, pen_size)
    turtle.left(double_angle)
    tree(sub_length, turtle, pen_size)
    turtle.right(angle)
    turtle.backward(branch_length)

def main():
    myWin = Screen()
    yertle = Turtle(visible=False)

    yertle.left(90)
    yertle.penup()
    yertle.backward(170)
    yertle.pendown()

    myWin.tracer(False)
    tree(randrange(40, 47), yertle, PEN_SIZE)
    myWin.tracer(True)

    myWin.exitonclick()

main()

一旦您提交了tracer(False),那么speed('fastest')可能就不再起作用了,所以您可以随意地丢弃它。

wtlkbnrh

wtlkbnrh3#

在那里你需要使用first screen = Screen()-获取屏幕模块screen.tracer(0)的访问权限-设置所有动画在你需要在一些步骤中使用screen.update()

相关问题