浅谈 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:允许四种参数格式。
    1. 无:返回当前画笔颜色,可能是十六进制形式;
    2. colorstring:colorstring 为标准颜色字符串或十六进制,如,'red','yellow','#C012D1'。适用于没有设置 colormode 的情况;
    3. (r,g,b):若 colormode 为小数形式,\(r,g,b\in[0.0,1.0]\),若 colormode 为 rgb 形式,\(r,g,b\in[0,255]\);
    4. 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)
  1. 指定坐标为 \(\textrm{(X,Y)}\)。
  2. 同 1,指定 \(x\) 坐标为 \(\textrm{X}\),\(y\) 坐标为 \(\textrm{Y}\)。
  3. 指定 \(x\) 坐标为 \(\textrm{X}\),\(y\) 坐标不变。
  4. 指定 \(y\) 坐标为 \(\textrm{Y}\),\(x\) 坐标不变。

函数 teleport:

函数 setx:

函数 sety:

函数 home:

抬笔 / 落笔

函数 penup / up / pu:

函数 pendown / down / pd:

转向 / 设置方向

函数 left / lt:

函数 right / rt:

函数 setheading / seth:

隐藏 / 显示海龟

函数 showturtle / st:

函数 hideturtle / ht:

绘制结束

函数 mainloop / done:

案例 \(2.1\):多边形套多边形 解析

posted @ 2026-10-04 16:59  qjy123  阅读(9)  评论(0)    收藏  举报