我在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()
在这一点上我很困惑。也许有一个很明显的解决方案我没有,我不确定
谢谢
你不需要,也不想要。首先,您需要根据
tracer()
和update()
适当安排您的课程:其次,我用计时器事件替换了
while True:
,它在像turtle这样的事件驱动环境中没有位置。请注意ontimer()
的第二个参数,它是再次调用此方法之前的时间延迟我终于找到了答案
在Screen.update()之后可以使用一个名为time.sleep()的函数。如果您在time.sleep()内输入一个值,它将在再次刷新之前暂停数秒
例如,我通过以下操作修复了自己的代码:
希望这对任何人都有帮助
相关问题 更多 >
编程相关推荐