- turtle库
- 基本介绍
- 绘图窗体布局
- 画笔控制
- 运动控制
- 方向控制
- RGB色彩体系
- 其它函数
- turtle绘图示例
- 示例1:python蟒蛇绘制
- 示例2:七彩车轮
- 示例3:六芒星
本文参考:中国大学MOOC嵩天老师的python课程
turtle库 基本介绍- 入门级图形绘制函数第三方库1
- turtle绘图原理:一只海龟在窗体中行走,路径便是绘制的图形
turtle的绘图窗体是一个画布空间,最小单位是像素
在使用turtle时分为屏幕坐标系和窗体坐标系
| 绘图窗体函数 | 描述 |
|---|---|
| turtle.setup(width,height,startx,starty) | 可以使用setup()函数设置窗体大小和相对屏幕的位置(默认位于屏幕中央),其中startx和starty两个参数可选 |
| 函数 | 别名 | 描述 |
|---|---|---|
| turtle.penup() | turtle.pu() | 提起画笔(常用于移动海龟位置,并不在画布上显示路径) |
| turlte.pendown() | turtle.pd() | 落下画笔(与penup()函数成对出现) |
| turtle.pensize(width)/turtle.width(width) | 用于设置画笔宽度 | |
| turtle.pencolor(color) | 设置画笔颜色(color为颜色字符串或RGB数值2) | |
| turtle.speed(speed) | 设置画笔移动速度,范围取[0-10]的整数,数字越快速度越快,0最快 |
turtle绘图体系中包含两种坐标体系:绝对坐标和海龟坐标
绝对坐标在绝对坐标系下的坐标体系,而海龟角度则是根据海龟的视角的角度体系
| 绝对坐标下运动控制函数 | 描述 |
|---|---|
| turtle.goto(x,y) /turtle.setpos(x,y) | 海龟移动到坐标(x,y)处 |
| 海龟坐标下运动控制函数 | 别名 | 描述 |
|---|---|---|
| turtle.forward(d) | turtle.fd(d) | 海龟前进d个像素 |
| turtle.backward(d) | turtle,bk(d) | 海龟后退d个像素 |
| turtle.circle(r,angle,steps) | 海龟沿半径为r的圆前进(angle/360)个圆周,即画圆圈3 |
turtle库中包含两种角度体系:绝对角度和海龟角度
其中绝对角度在绝对坐标系下的角度体系,而海龟角度则是根据海龟的视角的角度体系
| 绝对角度方向控制函数 | 描述 |
|---|---|
| turtle.seth(angle) | 改变海龟前进角度,不使海龟前进,angle为绝对角度 |
| 海龟角度方向控制函数 | 描述 |
|---|---|
| turtle.left(angle) | 控制海龟向左转角度angle(angle是相对于海龟前进的角度,并不使海龟前进) |
| turtle.right(angle) | 控制海龟向右转角度angle(同上) |
RGB指红蓝绿三个通道的颜色组合,覆盖人类视力能够感知的所有颜色,每个颜色的取值范围为整数(0-255)或小数(0-1)
turtle的RGB色彩模式默认采用小数值,可以切换为整数值:turtle.colormode(mode)
mode=1,小数模式,修改颜色使用RGB小数值
mode=255,整数模式,修改颜色使用RGB整数值
颜色填充
| 函数 | 描述 |
|---|---|
| turtle.begin_fill() | 开始填充 |
| turtle.fillcolor(color) | 填充颜色 |
| turtle.end_fill() | 结束填充 |
| turtle.filling() | 判断是否为填充状态 |
设置画笔
| 函数 | 描述 |
|---|---|
| turtle.hideturtle() | 隐藏画笔 |
| turtle.showturtle() | 显示画笔 |
| turtle.delay() | 设置并返回绘图延迟 |
| turtle.dot(r,color) | 绘制半径为r,颜色为color的圆点 |
| turtle.reset() | 从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值 |
| turtle.clear() | 从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响 |
| turtle.setx(x) | 设置海龟的横坐标为 x,纵坐标保持不变 |
| turtle.sety(y) | 设置海龟的纵坐标为 y,横坐标保持不变 |
获取海龟(画笔)状态
| 函数 | 描述 |
|---|---|
| turtle.home() | 设置当前画笔位置为原点,朝向东 |
| turtle.position() | 获取海龟当前位置 |
| turtle. towards(x,y) | 从海龟位置到到 (x,y)的矢量到海龟初始朝向的矢量的夹角。 |
| turtle.xcor() | x坐标 |
| turtle.ycor() | y坐标 |
| turtle.heading() | 返回海龟朝向角度 |
| turtle.distance(x,y) | 返回从海龟位置到 (x,y)的单位距离 |
import turtle
turtle.setup(700,500)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor('purple')
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
turtle.circle(40,40)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
turtle.done()
示例2:七彩车轮
iimport turtle
import random
turtle.setup(800,400)
angle=36
color=['pink','purple','green','cyan','gold','brown','yellow','blue']
for i in range(10):
turtle.pensize(10)
pencolor=color[random.randint(0,7)]
turtle.pencolor(pencolor)
turtle.fd(180)
if i==9:
turtle.left(angle)
turtle.penup()
turtle.goto(0,-180)
turtle.pd()
turtle.circle(180)
else:
turtle.penup()
turtle.goto(0,0)
turtle.pd()
turtle.left(angle)
turtle.circle(180)
turtle.done()
示例3:六芒星
import turtle
import math
turtle.pensize(4)
turtle.pencolor('brown')
# 绘制小六边形
turtle.left(30)
for i in range(6):
turtle.fd(50)
turtle.left(60)
# 调整画笔状态,准备绘制大六边形
turtle.penup()
turtle.goto(0,-50)
turtle.pendown()
# 大六边形
for i in range(6):
turtle.fd(100)
turtle.left(60)
# 绘制小六角星
turtle.left(30)
for i in range(3):
turtle.fd(100*(math.sqrt(3)))
turtle.left(120)
turtle.right(60)
turtle.pu()
turtle.circle(100,60)
turtle.pd()
turtle.left(60)
for i in range(3):
turtle.fd(100*(math.sqrt(3)))
turtle.left(120)
# 调整画笔状态,准备绘制第一个大六角星
turtle.right(90)
turtle.pu()
turtle.goto(0,-100)
turtle.pd()
turtle.left(30)
# 第一个大六角星
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
turtle.right(60)
turtle.circle(150)
turtle.circle(150,60)
turtle.left(60)
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
# 调整画笔状态,准备绘制第二个大六角星
turtle.right(60)
turtle.circle(150,30)
turtle.pensize(1)
turtle.left(60)
# 第二个大六角星
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
turtle.right(60)
turtle.circle(150,60)
turtle.left(60)
for i in range(3):
turtle.fd(150*(math.sqrt(3)))
turtle.left(120)
# 调整画笔状态,准备绘制六连环
turtle.pu()
turtle.goto(0,50)
turtle.pd()
# 六连环绘制
turtle.color('black')
for i in range(6):
turtle.circle(75)
turtle.left(60)
turtle.done()
标准库:随解释器直接安装到操作系统中的功能模块
第三方库:需要经过安装才能使用的函数库 ↩︎此处的RGB数值有两种表示方式,分别为元组形式或数值形式,如turtle.pencolor(255,255,255)和turtle.pencolor((255,255,255)) ↩︎
海龟画圆时,圆心的默认位置是其左方90度距离r的绝对值的位置(r为负值时圆心位于右方),其中第三个参数steps,未指定时,circle()函数绘制圆弧,指定时则绘制边数为steps的多边形,如绘制一个三角形我们用一行代码实现:turtle.circle(50,360,3) ↩︎



