Python Turtle中Screen.tracer(0)未完全停止动画的问题咨询
Python Turtle
tracer(0)仍存在自动动画的原因与解决方案 问题原因
Screen.tracer(0)的作用只是关闭「每执行一次海龟绘图指令就自动刷新一次屏幕」的默认逻辑,并没有完全禁用所有隐式刷新行为:
- 海龟移动留下的线条轨迹属于画布绘图缓冲区的内容,turtle的内置事件循环在空闲状态时会自动把这部分缓冲区的内容刷新到屏幕上,所以就算不调用
update(),轨迹还是会逐步显示。 - 海龟本身的形状光标属于独立的图层,这部分的更新只有显式调用
screen.update()时才会触发,所以注释掉update()后只会看到轨迹移动,看不到海龟本身位置变化。
完全手动控制屏幕刷新的方法
可以通过禁用空闲自动刷新逻辑,实现只有显式调用update()时才刷新整个屏幕,修改方案如下:
import turtle def move(): my_turtle.forward(1) my_turtle.right(1) screen.update() # 只有调用该行时屏幕才会整体刷新 screen.ontimer(move, 10) screen = turtle.Screen() my_turtle = turtle.Turtle() my_turtle.shape("turtle") screen.tracer(0) # 新增该行禁用画布隐式自动刷新 screen.getcanvas()._do_update = lambda *args: None move() turtle.done()
修改后如果注释掉screen.update(),整个屏幕不会有任何更新,轨迹和海龟形状都保持静止,完全由手动调用update()控制刷新时机。
内容的提问来源于stack exchange,提问作者Robin Andrews
相关产品推荐
相关产品推荐

