python - 如何增加turtle.tracer()的延迟? [PYTHON]

标签 python pyzo python-turtle

我正在 Pyzo 中做一个练习项目,我在使用turtle.tracer()时遇到了一些问题。

当 n =/= 0 或 1 时,我遇到了屏幕上的对象开始闪烁的问题。

import turtle
sketcher = turtle.Turtle()
canvas = turtle.Screen()

sketcher.speed(0)
sketcher.hideturtle()

def drawPinwheelAnimation(length):
    sketcher.setheading(90)
    backwardLength = length
    lengthChange = 1
    while(True):
        canvas.tracer(36)
        drawPinwheel(0, 0, length, backwardLength)
        drawPinwheel(3*length, 0, length, backwardLength)
        drawPinwheel(0, 3*length, length, backwardLength)
        drawPinwheel(-3*length, 0, length, backwardLength)
        drawPinwheel(0, -3*length, length, backwardLength)
        canvas.update()
        backwardLength += lengthChange
        if(backwardLength == (1.5*length) or backwardLength == (0.5*length)):
            lengthChange *= -1
        sketcher.clear()

def drawSwingingPinwheel(xPos, yPos, initialLength):
    while(True):
        drawPinwheel(xPos, yPos, forwardLength, backwardLength)
        backwardLength += lengthChange
        if(backwardLength == (1.5*initialLength) or backwardLength == (0.5*initialLength)):
            lengthChange *= -1
        sketcher.clear()


def drawPinwheel(xPos, yPos, fdLength, bkLength):
    sketcher.penup()
    sketcher.setpos(xPos, yPos)
    sketcher.pendown()
    for side in range(12):
        sketcher.fd(fdLength)
        sketcher.bk(bkLength)
        sketcher.rt(30)

drawPinwheelAnimation(50)

turtle.mainloop()

当n = 1时,没有闪烁,但这也意味着动画无论如何都以基本速度进行,因此没有效果。当n=0时,没有闪烁。然而,对于我的目的来说,它太快了。我尝试更改“延迟”值,但无济于事:

        canvas.tracer(0, 1000) #Changing the second value to 1000 has no notable difference.
        drawPinwheel(0, 0, length, backwardLength)
        drawPinwheel(3*length, 0, length, backwardLength)
        drawPinwheel(0, 3*length, length, backwardLength)
        drawPinwheel(-3*length, 0, length, backwardLength)
        drawPinwheel(0, -3*length, length, backwardLength)
        canvas.update()

我现在很困惑。我不确定可能缺少一个非常明显的解决方案。

谢谢!

最佳答案

我最终找到了答案!

有一个可以在 Screen.update() 之后使用的函数,称为 time.sleep()。如果您在 time.sleep() 中输入一个值,它将暂停几秒钟,然后再次刷新。

例如,我通过这样做修复了自己的代码:

import turtle
import time
sketcher = turtle.Turtle()
canvas = turtle.Screen()

sketcher.speed(0)
sketcher.hideturtle()

def drawPinwheelAnimation(length):
    sketcher.setheading(90)
    backwardLength = length
    lengthChange = 1
    while(True):
        canvas.tracer(0)
        drawPinwheel(0, 0, length, backwardLength)
        drawPinwheel(3*length, 0, length, backwardLength)
        drawPinwheel(0, 3*length, length, backwardLength)
        drawPinwheel(-3*length, 0, length, backwardLength)
        drawPinwheel(0, -3*length, length, backwardLength)
        canvas.update()
        time.sleep(.01) # <-------- Here's the time.sleep() function!
        backwardLength += lengthChange
        if(backwardLength == (1.5*length) or backwardLength == (0.5*length)):
            lengthChange *= -1
        sketcher.clear()

def drawSwingingPinwheel(xPos, yPos, initialLength):
    while(True):
        drawPinwheel(xPos, yPos, forwardLength, backwardLength)
        backwardLength += lengthChange
        if(backwardLength == (1.5*initialLength) or backwardLength == (0.5*initialLength)):
            lengthChange *= -1
        sketcher.clear()


def drawPinwheel(xPos, yPos, fdLength, bkLength):
    sketcher.penup()
    sketcher.setpos(xPos, yPos)
    sketcher.pendown()
    for side in range(12):
        sketcher.fd(fdLength)
        sketcher.bk(bkLength)
        sketcher.rt(30)

drawPinwheelAnimation(50)

turtle.mainloop()

希望这对任何人都有帮助!

关于python - 如何增加turtle.tracer()的延迟? [PYTHON],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60999871/

相关文章:

python - Tensorflow 分类示例期间的 tf.train.get.global_step 错误

Python:如何重置 turtle graphics 窗口

python - pyodbc 不更新表

python - Django 项目路径中的 Unicode 字符

Python .replace() 内部双 For 循环问题

python - 用Python画一颗有 turtle 的星星

python - NetworkX 测试失败

python - os.system 与命令行有何不同?

python - 我不断得到 “IndentationError: expected an indented block”