【问题标题】:Turtle tracer arguments example troubleTurtle tracer 参数示例麻烦
【发布时间】:2013-10-27 15:36:55
【问题描述】:

Turtle.tracer 的具体用法是什么?在 python 文档中,它写成 Turn turtle animation on/off and set delay for update drawings. 我用它来禁用动画,但参数不清楚,例如在这段代码中,如果我使用 turtle.trace,turtle does not draw rest of table 如何设置正确的参数。

import turtle
turtle.width(5)
yd=xd=-64
turtle.tracer(8,25)#This is the problem
for i in range(2):
    turtle.up()
    turtle.goto(-197.5,yd)
    turtle.down()
    turtle.seth(0)
    turtle.fd(394)
    yd+=128
    turtle.up()
    turtle.goto(xd,197.5)
    turtle.down()
    turtle.seth(270)
    turtle.fd(394)
    xd+=128

【问题讨论】:

    标签: python python-3.x turtle-graphics


    【解决方案1】:

    Turtle.tracer 的具体用法是什么? ...我用它来禁用 动画,但论点不明确...

    乌龟屏幕单例的tracer() 方法(也暴露为顶级函数)的功能很容易理解,但它的参数不是。默认设置为:

    turtle.tracer(1, 10)
    

    让我们首先处理可选的第二个参数。为了方便起见,它只是简单地传递给海龟屏幕单例的delay() 方法。从那里它被传递到turtle 的TK 基础上。由于这个答案是关于tracer(),我不会在这里讨论delay()

    我看到了两种使用 tracer() 的方法。更复杂的是提供一个数值n,它告诉turtle 只执行每n 次更新而不是每次更新。这取决于您对绘图代码的深入了解,例如,您只需要每 257 次更新一次。并在实际发生更新时有所了解。对于我们大多数人来说,情况并非如此。

    使用tracer() 的更简单方法是使用一个布尔参数(伪装成数字)并与update() 函数结合使用:

    tracer(False)  # turn off visible drawing
    
    for ...:
        ...  # draw stuff
        update()  # update the visible drawing now
    ...
    tracer(True)  # return to normal drawing
    

    有几点需要注意: 1) 龟屏单例的clear() 方法将tracer() 重置为其默认值; 2) 某些海龟命令,例如 end_fill(),可能会导致更新发生,无论您的跟踪器设置如何。

    您的代码使用更简单的tracer() 模型重新编写:

    import turtle
    
    yd = xd = -64
    
    turtle.width(5)
    turtle.tracer(False)
    
    for i in range(2):
        turtle.penup()
        turtle.goto(-197.5, yd)
        turtle.pendown()
        turtle.setheading(0)
        turtle.forward(394)
    
        yd += 128
    
        turtle.penup()
        turtle.goto(xd, 197.5)
        turtle.pendown()
        turtle.setheading(270)
        turtle.forward(394)
    
        xd += 128
    
        turtle.update()  # only display completed lines
    
    turtle.hideturtle()
    turtle.tracer(True)
    turtle.mainloop()
    

    【讨论】:

      【解决方案2】:

      使用turtle.delay(0):

      import turtle
      turtle.width(5)
      yd=xd=-64
      turtle.delay(0) # <----
      for i in range(2):
          turtle.up()
          turtle.goto(-197.5,yd)
          turtle.down()
          turtle.seth(0)
          turtle.fd(394)
          yd+=128
          turtle.up()
          turtle.goto(xd,197.5)
          turtle.down()
          turtle.seth(270)
          turtle.fd(394)
          xd+=128
      turtle.mainloop()
      

      如果您使用turtle.tracer,则使用turtle.update

      ...
      turtle.tracer(8,25)
      for i in range(2):
          ...
      turtle.update()
      tracer.mainloop()
      

      【讨论】:

      • tracer.update() ... 真的吗?没有定义“示踪剂”。你运行过这段代码???此外,在docs.python.org/2/library/turtle.html#turtle.update 中,它说:turtle.update():执行 TurtleScreen 更新。在跟踪器关闭时使用。上帝的份! (但是,我不会对您的回复投反对票,因为我不这样做。评论比投反对票更有用,因为它通常是不正确的!)
      • @Apostolos, tracer 来自 OP 的代码。我运行代码没有任何属性错误。 docs.python.org/2/library/turtle.html#turtle.tracer(您输入的是 tracer(..) 而不是 turtle.tracer(..) 吗?
      • @Apostolos,根据文档,在 n(上面代码中的 8 个)绘图后关闭跟踪器。之后没有画图;需要手动调用update 才能绘制其余图纸。
      • @Apostolos,有updatei.imgur.com/8EMSkg3.png,没有updatei.imgur.com/hkYlI1U.png
      • 我不知道你在说什么。 tracer.update() 引发“NameError: name 'tracer' is not defined”。而且我没有输入任何内容。我像往常一样复制粘贴了代码,以避免意外输入错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2011-01-16
      • 2014-04-28
      • 2023-02-06
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      相关资源
      最近更新 更多