python - 乌龟使用睡眠控制刷新率不能正常刷新
问题描述
我通过使用 tracer(0, 0) 并标记海龟光标本身来控制海龟动画。
但是,它会奇怪地刷新,假设任何动画(带睡眠)之间的间隔为 1 秒,但它似乎有时会挂起两秒,然后在几秒后就位:
代码是:
import turtle
import time
screen = turtle.Screen()
screen.listen()
screen.tracer(0, 0)
pen = turtle.Turtle()
pen.speed('fastest')
pen.shape("circle")
pen.penup()
pen.hideturtle()
next = [0, 8]
time.sleep(10)
while True:
pen.goto(next[0]*20, next[1]*20)
screen.clear()
pen.stamp()
screen.update()
time.sleep(1)
next = [next[0], next[1]-1]
似乎只是睡觉不是一个好主意。我似乎也很难让它与线程一起工作。在这种情况下,我如何使用预定义的时间(如 1 秒)?
解决方案
在像 turtle 这样的事件驱动的世界中使用sleep
和while True:
循环是一个坏主意。我们可以改为使用计时器事件来产生您描述的效果。当我们在做的时候,我们会折腾冲压clear()
,因为这不会添加任何东西, and也不是listen()
:
from turtle import Screen, Turtle
CURSOR_SIZE = 20
def drop():
screen.update()
turtle.sety(turtle.ycor() - CURSOR_SIZE)
screen.ontimer(drop, 1000) # 1 second
screen = Screen()
screen.tracer(False)
turtle = Turtle()
turtle.shape('circle')
turtle.penup()
turtle.sety(160)
screen.ontimer(drop, 10_000) # 10 seconds
screen.mainloop()
当然,您需要添加一些逻辑以避免在圆圈从屏幕底部掉下时重新启动计时器事件。通过使用while True:
循环,sleep()
您可能会阻止事件(例如用户击键或窗口关闭)到达海龟。
这里的一个小错误是该drop()
方法需要一些最少的时间来运行 - 考虑到这一点,如果需要/需要,您需要根据时钟时间或类似time.perf_counter()
@AnnZen 演示的东西调整时间,但不是pass
循环!
推荐阅读
- ios - Scroll to specific slide/website when button is pressed
- python - Pandas Pivot 创建 NaN
- r - 如何将集合运算表达式编程为函数的参数?
- html - 如何将会话变量传递给 play framework/scala 中的表单以存储在数据库中
- arm - 在 Atmel SAMD51 上配置内存保护单元
- parameters - 如果 Crystal Reports 中的参数值为空,则禁止显示页脚
- c# - 当.Net Thread没有名称时,如何使用NLog打印threadid而不是threadname?
- kubernetes - IBM Blockchain 2.0(测试版)不检测集群
- php - 为 Woocommerce 中的特定用户角色应用折扣
- node.js - 具有元素 ID 和嵌套元素的 Nodejs xpath 选择器不起作用