浅谈 py turtle 画图模块
\(0\) 前言
更新日志
- \(\texttt{update 2026.8.18}\) 第一次创作。
- \(\texttt{update 2026.10.4}\) 搬入博客。
本菜鸭好菜,如有错误欢迎 dalao 在评论区留言。
不喜轻喷
一些解释
移动:像某点进行一定速度的移动。若处于落地状态,则留下路径,还处于填充状态时,将进行填充。
传送:迅速移到某一点,不留路径,不填充。
help
如果你想深入了解一个函数,可以在 IDLE 模式下使用 help()。
例如 turtle.fd:
>>> import turtle
>>> help(turtle.fd)
就可以深入进行了解了。
\(1\) turtle 初始化
turtle 是 python 中十分常用的画图模块。支持画出各种图像。
导入 turtle
通过 import 导入。
import turtle
为了书写简便,我一般用以下方式简化:
t = __import__('turtle') #用 t 代替 turtle
import turtle as t #用 t 代替 turtle
from turtle import * #导入 turtle 内所有函数
提示
为了方便,以下使用第 2 种简化方式。
绘图窗口初始化
函数 setup:窗口初始化
turtle.setup(width=0.5,height=0.75,startx=None,starty=None)
参数:
width:若输入为小于1的小数,则为窗口宽度与屏幕宽度之比;否则为窗口宽度(单位像素)。默认值 \(0.5\)。height:若输入为小于1的小数,则为窗口高度与屏幕高度之比;否则为窗口高度(单位像素)。默认值 \(0.75\)。startx:屏幕左侧与窗口左侧的距离(单位像素)。默认值为 \(\texttt{None}\),即正中间。starty:屏幕顶部与窗口顶部的距离(单位像素)。默认值为 \(\texttt{None}\),即正中间。
如 turtle.setup(800,800,0,0) 就在屏幕左上角。
图就不贴了吧,dalao 可以自行试验。
初始化海龟

海龟初始在 \((0,0)\) 处,定义海龟初始方向为 \(0\) 度。
函数 speed:画笔速度
turtle.speed(speed=None)
参数:
speed:海龟速度,为 \([0,10]\) 之间的整数,默认为 \(\texttt{None}\),即为 \(3\)。
\(\textsf{speed}=0\):
fastest最快。
\(\textsf{speed}=10\):fast较快。
\(\textsf{speed}=6\):normal匀速。
\(\textsf{speed}=3\):slow较慢。
\(\textsf{speed}=1\):slowest最慢。若 \(\textsf{speed}=0\),则没有动画的显示,即立刻移动到对应位置/转向到对应方向。
函数 colormode:颜色的形式
turtle.colormode(cmod=None)
参数:
cmod:可以取值 \(\texttt{None}/1.0/255\)。\(1.0\) 表示小数形式,\(255\) 表示 rgb 形式,默认 \(\texttt{None}\),即返回当前颜色形式。
各种形式具体见下个函数。
函数 pencolor:画笔颜色
turtle.pencolor(*args)
参数:
*args:允许四种参数格式。- 无:返回当前画笔颜色,可能是十六进制形式;
colorstring:colorstring为标准颜色字符串或十六进制,如,'red','yellow','#C012D1'。适用于没有设置colormode的情况;(r,g,b):若colormode为小数形式,\(r,g,b\in[0.0,1.0]\),若colormode为 rgb 形式,\(r,g,b\in[0,255]\);r,g,b:和 \(3.\) 没什么区别。
举个栗子
若要将画笔颜色调至红色:
import turtle as t
#1
t.pencolor('red')
#2
t.colormode(1.0)
t.pencolor(1.0,0.0,0.0)
#3
t.colormode(255)
tup = (255,0,0)
t.pencolor(tup)
(以上仅列举部分方法)
函数 bgcolor:画布颜色
turtle.bgcolor(*args)
参数:
*args:同pencolor的参数形式,设置或返回画布颜色。
函数 screensize:设置画布
turtle.screensize(canvwidth=None,canvheight=None,bg=None)
参数:
canvwidth:画布的宽度,整数。(单位像素)canvheight:画布的高度,整数。(单位像素)bg:同screensize的参数形式。
若三个参数均为默认值 \(\texttt{None}\),即返回 (canvwidth,canvheight)。
函数 pensize:画笔粗细
turtle.pensize(width=None)
参数:
width:将画笔粗细设为width(正数)。默认 \(\texttt{None}\),即返回画笔粗细,初始为 \(1\)。
案例 \(1.1\):Roast Duck 学海龟
案例描述
创建一个全屏的 turtle 窗口,画笔速度:最快,颜色:绿,粗细:\(50\),背景色:黄。然后 Roast Duck 忘记他在干什么了,请输出画笔速度、颜色、粗细。
\(\textsf{code}\)
import turtle as t
t.setup(1.0,1.0,None,None)
t.Screen().bgcolor("yellow")
t.speed(0)
t.colormode(1.0)
t.pencolor(0.0,1.0,0.0)
t.pensize(50)
print('speed:%d,color:%s,size:%d'%(t.speed(),t.pencolor(),t.pensize()))
代码解释
- 第 \(1\) 行:导入 turtle 模块。
- 第 \(3\) 行:初始化窗口,要求全屏,即窗口长度、高度与屏幕之比为 \(1.0\)。
- 第 \(5\sim 9\) 行:设置速度 \(0\),颜色 \(\green{(0.0,1.0,0.0)}\),粗细 \(50\),窗口颜色
yellow。 - 第 \(9\) 行:格式化依次输出。
\(2\) 海龟画图 \(\textrm{Level 1}\)
从现在开始,我们就可以正式开始绘画啦!
提示:作者不会在函数部分贴图,dalao 们可以自行试验或结合案例。
让我们从一个简单的示例开始……
案例 \(2.1\):多边形套多边形
案例描述
今天 Roast Duck 灵感大发,想要点正 \(n\) 边形的每个节点标红,并在其周围画一个小的正 \(n\) 边形,于是他求助的一旁吃瓜的 dalao 你。
最终图像

(当 \(n=8\) 时)
\(\textsf{code}\)
import turtle as t
def main():
n = int(input("请输入边数n:"))
t.setup(0.5,0.5)
t.colormode(255)
t.bgcolor(0,0,0)
t.speed(6)
t.pencolor(0,120,120)
t.pensize(3)
t.penup()
t.goto(0,450)
t.setheading(0)
t.pendown()
for i in range(1,n+1):
t.fd(200)
t.dot(5,(255,0,0))
t.setheading(0)
t.penup()
t.fd(30)
t.pendown()
t.left(90)
t.circle(30,steps=n)
t.right(90)
t.penup()
t.bk(30)
t.pendown()
t.right(360/n*i)
t.hideturtle()
t.done()
main()
代码解析先放一边,我们先来了解一下这些函数。
绘制点
函数 dot
turtle.dot(size=None,*color)
参数:
size:点的直径,整数(单位像素)。如果为默认值 \(\texttt{None}\),则size为 \(\max(\texttt{pensize}+4,2\texttt{pensize})\)。*color:同pencolor的参数形式,点的颜色。
画笔移动
函数 forward / fd:向前移动
turtle.forward(distance)
或
turtle.fd(distance)
参数:
distance:向当前方向移动distance像素,可以为浮点数。
函数 backward / back / bk:向后移动
turtle.backward(distance)
或
turtle.back(distance)
或
turtle.bk(distance)
参数:
distance:向当前方向的相反方向移动distance像素,可以为浮点数。
设置位置
函数 setposition / setpos / goto:移动至一点
turtle.setposition(x,y=None)
或
turtle.setpos(x,y=None)
或
turtle.goto(x,y=None)
参数:
x:可以为一个数值,表示移动后的 \(x\) 坐标;或一个元组(坐标对),表示移动后的 \(x,y\) 坐标(当y为 \(\texttt{None}\))。y:表示移动后的 \(y\) 坐标。也可以为默认值 \(\texttt{None}\)。
解释
goto 可以为以下几种形式:
#1
turtle.goto((X,Y)) or turtle.goto(x=(X,Y),y=None)
#2
turtle.goto(X,Y) or turtle.goto(x=X,y=Y)
#3
turtle.goto(X) or turtle.goto(x=X)
#4
turtle.goto(y=Y)
- 指定坐标为 \(\textrm{(X,Y)}\)。
- 同 1,指定 \(x\) 坐标为 \(\textrm{X}\),\(y\) 坐标为 \(\textrm{Y}\)。
- 指定 \(x\) 坐标为 \(\textrm{X}\),\(y\) 坐标不变。
- 指定 \(y\) 坐标为 \(\textrm{Y}\),\(x\) 坐标不变。

浙公网安备 33010602011771号