Python turtle自定义函数未一次性执行全部代码问题求助
问题成因
- 你设置了
wn.tracer(0)关闭了turtle的自动渲染机制,所有绘制指令都会先进入缓存,只有主动调用wn.update()才会把缓存的绘制结果同步到屏幕上。你目前的update()调用仅写在主循环中,cross()函数执行完最后一条黄色边的绘制代码后没有立刻触发刷新,因此界面上看不到这条边,直到下一次鼠标点击触发事件、程序走到update步骤才会把上一次的绘制结果渲染出来,就造成了「最后一条边等下次点击才显示」的错觉。 - 你的主事件循环逻辑存在错误:
wn.onscreenclick()仅需要绑定一次回调函数即可,不需要放在循环中重复绑定;wn.mainloop()本身就是turtle内置的阻塞式事件循环,套在while True里属于冗余写法,还会干扰事件处理流程。
修复方案
修改两处代码即可:
- 在
cross()函数的末尾添加wn.update(),绘制完十字的四条边后立刻刷新屏幕 - 删掉冗余的
while True循环,仅保留一次事件绑定和主循环调用
修复后的完整代码如下:
import turtle as t wn = t.Screen() wn.title("graph") wn.setup(width=600, height=600) wn.tracer(0) pen = t.Turtle() pen.color("black") pen.shape("classic") pen.goto(0, 0) pen.ht() x = 10 y = 10 def cross(x, y): print(x, y) pen.pensize(2.5) pen.pu() pen.goto(x, y) pen.pd() pen.seth(225) pen.color("red") pen.fd(50) pen.color("black") pen.pu() pen.goto(x, y) pen.pd() pen.left(180) pen.fd(50) pen.pu() pen.goto(x, y) pen.seth(315) pen.pd() pen.color("green") pen.fd(50) pen.pu() pen.goto(x, y) pen.left(180) pen.pd() pen.color("yellow") pen.fd(50) print("now") # 新增:绘制完成后立刻刷新屏幕 wn.update() cross(x, y) # 仅绑定一次点击事件 wn.onscreenclick(cross) # 启动主事件循环即可,不需要套while True wn.mainloop()
内容的提问来源于stack exchange,提问作者i need python help pls
相关产品推荐
相关产品推荐

