python - 如何增加turtle.tracer() 的延迟?[PYTHON]
问题描述
我正在 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()
希望这对任何人都有帮助!
推荐阅读
- javascript - 我有一个简单的问题,它应该返回一个在数组中计数为奇数的整数
- c# - 如何从带有过滤选项的搜索框中找到我期望的条件
- r - 如何使用函数通过 ggplot2 转换轴值?
- c++ - 如何通过 Azure DevOps 管道构建使用来自 vcpkg 的依赖项的 MSVC++ 项目?
- python - 问:django-simple-menu - 菜单不加载
- kubernetes - 仪表板未运行
- c# - 如何在表头中插入换行符?
- android - 函数在 c 中被弃用 [-Wdeprecated-declarations]
- node.js - semantic-release 配置为仅从 master 发布
- flutter - 输入文本宽度超过文本域宽度时如何防止flutter文本域文本消失?