turtle 是 Python 标准库中一个用于绘图和教学的图形模块,通过模拟“海龟”(Turtle)在画布上的移动来绘制各种几何图形。它尤其适合编程初学者学习基本的编程思维、函数调用、坐标系统和图形绘制等。
常见应用场景:
(1)编程教学:图形化地引导初学者理解程序流程。
(2)图形绘制:创建几何图形、分形、螺旋线等图案。
(3)动画演示:通过移动和绘图指令控制动态变化。
(4)交互设计:响应鼠标点击、键盘输入,制作小游戏。
◆ ◆ ◆
核心概念
1、画布坐标系
中心点为 (0, 0),向右为 x 轴正方向,向上为 y 轴正方向。
2、海龟
一个可移动的绘图实体,类似画笔,支持移动、旋转、控制颜色与粗细。
3、状态与动作
海龟有位置、方向、画笔状态(提笔/落笔)等,可通过方法精确控制。
4、填充与图层
支持封闭区域的颜色填充,支持图层叠加和重绘。
5、事件驱动
支持绑定鼠标、键盘事件,使程序具备交互性。
6、绘图流程
海龟的绘图逻辑非常接近现实中“拿笔在纸上画图”的思维方式,因此易于理解。
◆ ◆ ◆
应用举例
例 1:绘制正方形
import turtle
t = turtle.Turtle()for _ in range(4): t.forward(100) t.left(90)
turtle.done()
例 2:绘制彩色螺旋
import turtleimport colorsys
t = turtle.Turtle()t.speed(0)turtle.bgcolor("black")
hue = 0for i in range(200): color = colorsys.hsv_to_rgb(hue, 1, 1) t.pencolor(color) t.forward(i * 2) t.left(59) hue += 0.005
turtle.done()
例 3:响应鼠标点击
import turtle
def draw_circle(x, y): t.penup() t.goto(x, y) t.pendown() t.circle(30)
t = turtle.Turtle()t.speed(0)
screen = turtle.Screen()screen.onscreenclick(draw_circle)screen.mainloop()
例 4:绘制五角星
import hashlib
def hash_file(path): h = hashlib.sha256() with open(path, 'rb') as f: for chunk in iter(lambda: f.read(4096), b''): h.update(chunk) return h.hexdigest()
print(hash_file("example.txt"))
说明:
五角星的每个角是 36°,但由于 turtle 是顺时针旋转,所以我们转的是 180 - 36 = 144°。
例 5:绘制心形图案并添加文字
import turtle
t = turtle.Turtle()t.color('red')t.begin_fill()
t.left(140)t.forward(180)t.circle(-90, 200)t.left(120)t.circle(-90, 200)t.forward(180)
t.end_fill()
t.penup()t.goto(0, -20)t.color('cyan')t.write("Love", align="center", font=("Arial", 20, "bold"))
turtle.done()
提示:
此例利用曲线绘制左右对称的心形,并在中间写入文字,适合节日贺卡或图像创作。
◆ ◆ ◆
常用函数速览
begin_fill()
开始记录填充区域。之后的绘图路径会被用于填充颜色,直到调用 end_fill()。
参数:无
返回:None
bgcolor(color)
设置画布背景颜色。
参数:color 为颜色名或 RGB 值
返回:None
circle(radius, extent=None, steps=None)
以当前方向的左侧为圆心,绘制一个圆或弧形。
参数:
radius:半径,正数表示左侧为圆心,负数表示右侧
extent(可选):弧度角度,默认 360
steps(可选):用多少条直线逼近圆弧
返回:None
clear()
清除当前 turtle 绘制的所有图形,不重置位置和方向。
参数:无
返回:None
color(*args)
设置画笔颜色和填充颜色。
参数:
一个参数时,设置画笔和填充颜色为相同
两个参数时,第一个为画笔颜色,第二个为填充颜色
返回:当前颜色设置(字符串或元组)
delay(delay_ms)
设置动画延迟,单位为毫秒,用于控制绘图速度(间接影响)。
参数:delay_ms 为整数,单位为毫秒
返回:None
done()
表示 turtle 绘图已完成,防止窗口立即关闭。
参数:无
返回:None
end_fill()
结束填充区域,并用当前填充颜色填充记录的区域。
参数:无
返回:None
fillcolor(color)
设置填充颜色。
参数:color 为颜色名(如 'blue')或 RGB 元组
返回:None
forward(distance)
沿当前方向前进指定的距离。
参数:
distance:前进距离(正数)
返回:None
别名:fd(distance)
getcanvas()
返回一个 tkinter.Canvas 对象,它是 turtle 所使用的底层画布。通过该对象,可以直接使用 tkinter 的方法对绘图窗口进行更精细的控制,比如添加文本、绑定事件、操作图层等。
参数:无
返回:返回 tkinter.Canvas 对象,即,turtle 所绘制的实际画布
说明:
这个函数适用于需要混合使用 turtle 和 tkinter 的高级用户。
goto(x, y)
将 turtle 移动到指定坐标位置。
参数:
x:目标 x 坐标
y:目标 y 坐标
返回:None
hideturtle()
隐藏 turtle 指针(通常是箭头形状),不影响绘图。
参数:无
返回:None
别名:ht()
left(angle)
左转指定角度,改变前进方向。
参数:
angle:旋转角度,单位为度
返回:None
别名: lt(angle)
mainloop()
启动 turtle 图形界面的主事件循环,让绘图窗口保持开启状态,等待用户操作或响应事件(如点击、拖拽、键盘输入等)。这是所有 turtle 程序的结尾部分,确保图形窗口不会一闪而过。
在某些环境中(如 IDLE 或交互式 shell)可以省略不写,但在独立运行的 .py 文件中,通常需要明确调用 mainloop() 才能让窗口保持打开。
参数:无
返回:None
onclick(fun, btn=1, add=None)
绑定鼠标点击事件,当海龟画布被点击时调用指定函数。
参数:fun 为回调函数;btn 为鼠标按钮(1=左键);add 表示是否新增绑定
返回:None
ontimer(function, t=0)
在指定毫秒后触发一次函数调用,用于定时动画或逻辑调度。
参数:function 为回调函数;t 为延迟毫秒数
返回:None
pencolor(color)
设置画笔颜色。
参数:
color:颜色名称或 RGB 元组
返回:当前画笔颜色
pendown()
落下画笔,移动时会绘制轨迹。
参数:无
返回:None
别名:pd()
pensize(width)
设置绘图线条的粗细。
参数:
width:线条宽度,单位为像素
返回:当前线宽
别名:width(width)
penup()
抬起画笔,移动时不会绘制轨迹。
参数:无
返回:None
别名:pu()
reset( )
重置画布和海龟状态,等效于清空并回到初始状态。
参数:无
返回:None
right(angle)
右转指定角度,改变前进方向。
参数:
angle:旋转角度,单位为度
返回:None
别名:rt(angle)
setheading(angle)
设置海龟朝向(0=右,90=上,180=左,270=下)。
参数:angle 为角度值
返回:None
别名:seth(angle)
shape(name)
设置海龟的图标形状。
参数:name 可为 'turtle'、'arrow'、'circle' 等
返回:None
showturtle( )
显示海龟图标。
参数:无
返回:None
别名:st()
speed(n)
设置绘图速度(0=最快,1~10 越大越快)。
参数:n 为整数或字符串
返回:None
stamp( )
在当前位置盖下海龟形状的印章。
参数:无
返回:图章 ID(int)
tracer(n=None, delay=None)
设置绘图刷新频率(默认自动刷新)。
参数:n 控制多少步后刷新一次;delay 为刷新间隔(ms)
返回:None
update( )
手动刷新屏幕,仅当 tracer(0) 时使用。
参数:无
返回:None
write(text, move=False, align='left', font=('Arial', 8, 'normal'))
在当前位置写文字。
参数:text 为字符串;move 为是否移动海龟;align 为对齐方式;font 为字体设置
返回:None
◆ ◆ ◆
补充说明
1、运行环境
turtle 需要在支持 GUI 的环境中运行。部分在线平台或命令行环境无法显示图形窗口。
2、绘图延迟
可以通过 speed() 或 tracer() 调整绘图速度。
3、mainloop() 与 done()
两者皆可保持窗口开启,但 mainloop() 更适合绑定事件的程序。
4、对象 vs 函数式调用
turtle 支持两种风格——使用 Turtle() 类创建对象,或直接使用模块级函数。
5、图形导出
可通过 getcanvas().postscript() 等方法导出绘图内容为图像文件。
6、多 turtle 同屏
可创建多个 Turtle 实例,协同绘图或做动画。
“点赞有美意,赞赏是鼓励”