
python turtle 绘图后窗口一闪而过或根本不出现,通常是因为缺少事件循环入口;只需在绘图代码末尾添加 turtle.done() 即可保持窗口持续显示并响应。
在使用 Python 的 turtle 模块进行图形绘制时,一个常见却容易被忽视的问题是:程序运行结束,绘图窗口却未弹出,或刚出现就立即关闭。这并非 IDE(如 VS Code、PyCharm 或 IDLE)故障,也非系统兼容性问题,而是 Turtle 图形界面依赖事件循环(event loop)来维持窗口存活 —— 而默认情况下,Python 脚本执行完毕即退出,事件循环从未启动。
你的原始代码中虽然创建了 turtle.Screen() 和 turtle.Turtle(),也完成了绘图指令(如 forward()、left()),但缺少让窗口“驻留并等待用户交互”的关键调用。此时,Python 解释器执行完最后一行便终止进程,Turtle 窗口随之被系统回收,导致“看不见”或“闪退”。
✅ 正确做法是在所有绘图逻辑之后,显式调用:
turtle.done()
该函数是 turtle.mainloop() 的别名,作用是启动 Tkinter 事件循环,使窗口保持打开状态,并持续监听鼠标、键盘等事件。它不会自动关闭窗口,也不会因单击而退出——这是它与 turtle.exitonclick() 的核心区别:
立即学习“Python免费学习笔记(深入)”;
- turtle.exitonclick():窗口保持显示,但单击任意位置即关闭窗口并退出程序,适合演示或交互式小练习;
- turtle.done():窗口常驻,需手动关闭(点击右上角 ×)或通过其他逻辑控制退出,更适合调试、观察绘图结果或构建更复杂的 GUI 交互。
? 补充注意事项:
- 不要重复调用 turtle.done()(仅需一次,且必须在绘图结束后);
- 避免在 done() 后再执行任何 Turtle 指令(将被忽略);
- 若使用 turtle.Screen().exitonclick(),效果类似 exitonclick(),但推荐统一使用 turtle.done() 保证行为一致;
- 在某些 IDE(如部分 Jupyter 环境)中,turtle 可能受限,建议优先在终端/命令行中运行 .py 文件以获得完整支持。
修正后的完整示例(含健壮性增强):
import turtle
try:
color = input("What color: ").strip()
linewidth = int(input("What linewidth: "))
linelength = int(input("What linelength: "))
shape = input("line, triangle, or square: ").strip().lower()
myTurtle = turtle.Turtle()
myScreen = turtle.Screen()
myScreen.title("Turtle Drawing") # 可选:设置窗口标题
if shape == "line":
myTurtle.color(color)
myTurtle.width(linewidth)
myTurtle.forward(linelength)
elif shape == "triangle":
myTurtle.color(color)
myTurtle.width(linewidth)
for _ in range(3):
myTurtle.forward(linelength)
myTurtle.left(120)
elif shape == "square":
myTurtle.color(color)
myTurtle.width(linewidth)
for _ in range(4):
myTurtle.forward(linelength)
myTurtle.left(90)
else:
print("Shape not recognized.")
turtle.done() # ✅ 关键:启动事件循环,保持窗口可见
except ValueError:
print("Error: Please enter valid numbers for linewidth and linelength.")
except turtle.Terminator:
pass # 用户关闭窗口时的正常退出总结:turtle.done() 不是可选项,而是 Turtle 图形界面的“生命线”。只要绘图完成后忘记它,窗口就注定无法稳定呈现。养成习惯——绘图结束,立刻加 turtle.done()。










