turtle
Tk-free 原生 turtle 绘图,兼容教材脚本、填充、多画笔和事件。
Tk-free native turtle graphics for teaching scripts and classic turtle programs.
#预期效果
运行示例后会出现原生 turtle 画布,绘制填充五角星并等待点击关闭。
#适用场景
turtle 是 App 内置模块,用户直接写 import turtle 或 from turtle import *。使用原生绘图能力,不依赖 _tkinter,适合教材代码、几何绘图、填充图形、多画笔、点击/拖拽/键盘/定时器交互。
- 导入:
import turtle
#失败路径
| 情况 | 应该怎么处理 |
|---|---|
| 画布不刷新 | 静态复杂图使用 tracer(0) 后手动调用 update()。 |
| 教材代码依赖 Tk 对象 | getcanvas() 只提供常见兼容方法;需要完整桌面 Tk 能力时应改写。 |
| 动画过快或卡顿 | 调整 speed()、delay()、ontimer(),避免超大循环阻塞主线程。 |
| 需要游戏物理或精灵 | 使用 scene,不要在 turtle 中手写完整游戏循环。 |
#使用规则
- 用户代码写法保持标准 turtle 风格;不要提示用户安装 PyPI 上的
turtle包。 - 本实现不支持完整 Tk Canvas 对象;
getcanvas()只提供常见兼容占位方法。 - 复杂静态图优先使用
tracer(0)后update();动画用speed()、ontimer()或普通 turtle 循环。 - iOS 画布支持自动适配内容,用户也可以双指缩放/平移查看大图。
#标准示例
import turtle
screen = turtle.Screen()
screen.title("Turtle Demo")
screen.bgcolor("black")
screen.tracer(0)
pen = turtle.Turtle()
pen.shape("turtle")
pen.speed(0)
pen.pensize(2)
pen.color("cyan", "magenta")
pen.begin_fill()
for _ in range(5):
pen.forward(140)
pen.right(144)
pen.end_fill()
pen.penup()
pen.goto(0, -160)
pen.color("white")
pen.write("Native turtle", align="center", font=("Arial", 18, "bold"))
screen.update()
screen.exitonclick()
#常用 API
| 类型 | API | 说明 |
|---|---|---|
| class | Screen() | 获取全局 turtle 画布。 |
| class | Turtle() | 创建画笔,支持多 turtle。 |
| motion | forward(), backward(), goto(), setx(), sety(), home() | 移动与定位。 |
| angle | left(), right(), setheading(), heading(), degrees(), radians(), mode() | 角度、方向和 logo 模式。 |
| drawing | pensize(), pencolor(), fillcolor(), color(), dot(), circle() | 线条、颜色、圆弧和点。 |
| fill | begin_fill(), end_fill(), filling() | 填充路径。 |
| cursor | shape(), shapesize(), hideturtle(), showturtle(), stamp() | 光标、印章和自定义形状。 |
| screen | title(), bgcolor(), setup(), screensize(), setworldcoordinates() | 画布配置。 |
| render | tracer(), update(), speed(), delay() | 刷新和动画速度。 |
| events | onclick(), ondrag(), onrelease(), onkey(), ontimer(), listen() | 触摸、拖拽、键盘和定时器。 |
| dialogs | textinput(), numinput() | 系统输入弹窗。 |
| lifecycle | done(), mainloop(), exitonclick(), bye(), save() | 等待、关闭和 PNG 保存。 |
#完整公开名称
Screen, Turtle, RawTurtle, TurtleScreen, Pen, Vec2D, Shape, TurtleGraphicsError, forward, fd, backward, back, bk, right, rt, left, lt, goto, setpos, setposition, setx, sety, setheading, seth, home, circle, dot, stamp, clearstamp, clearstamps, undo, speed, position, pos, towards, xcor, ycor, heading, distance, degrees, radians, pendown, pd, down, penup, pu, up, isdown, pensize, width, pencolor, fillcolor, color, begin_fill, end_fill, filling, reset, clear, write, hideturtle, ht, showturtle, st, isvisible, shape, shapesize, turtlesize, resizemode, tilt, tiltangle, settiltangle, bgcolor, bgpic, title, setup, screensize, setworldcoordinates, window_width, window_height, tracer, update, delay, listen, onkey, onkeypress, onkeyrelease, onclick, ondrag, onrelease, onscreenclick, ontimer, textinput, numinput, done, mainloop, exitonclick, bye, getcanvas, colormode, register_shape, addshape, mode, save.
#兼容说明
register_shape() / addshape() 支持内置形状、polygon、compound,以及图片文件路径占位。postscript() 在 iOS 上会保存 PNG 路径,不生成 PostScript 文本。