Turtle库
Turtle最早来自于LOGO语言,是专门用于小孩子学习编程的,通过编程模拟一只turtle(海龟)在画
板上爬行绘制图案,后来很多高级语言都移植了海龟绘图,python从2.6之后也将turtle库加入了其内
部库中。由于是内部库,使用import turtle语句就能引入turtle库,绘图主要有以下几个步骤:设置画
板、设置画笔、控制海龟移动绘制图形、色彩填充。
turtle库安装
在命令行窗口输入:pip install turtle
turtle库的重要方法
- 设置画布
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
参数分别为画布的宽(单位像素), 高, 背景颜色 - 设置画布位置及大小
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例
(startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心 - 画笔设置:
命令 | 说明 |
---|---|
turtle.forward(distance) | 向当前画笔方向移动distance像素长 |
turtle.backward(distance) | 向当前画笔相反方向移动distance像素长度 |
turtle.right(degree) | 顺时针移动degree° |
turtle.left(degree) | 逆时针移动degree° |
turtle.pendown() | 移动时绘制图形,缺省时也为绘制 |
turtle.goto(x,y) | 将画笔移动到坐标为x,y的位置 |
turtle.penup() | 移动时不绘制图形,提起笔,用于另起一个地方绘制时用 |
turtle.speed(speed) | 画笔绘制的速度范围[0,10]整数 |
turtle.circle() | 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 |
- 画笔控制命令:
命令 | 说明 |
---|---|
turtle.pensize(width) | 绘制图形时的宽度 |
turtle.pencolor() | 画笔颜色 |
turtle.fillcolor(colorstring) | 绘制图形的填充颜色 |
turtle.color(color1, color2) | 同时设置pencolor=color1, fillcolor=color2 |
turtle.filling() | 返回当前是否在填充状态 |
turtle.begin_fill() | 准备开始填充图形 |
turtle.end_fill() | 填充完成; |
turtle.hideturtle() | 隐藏箭头显示; |
turtle.showturtle() | 与hideturtle()函数对应 |
- 全局控制命令
命令 | 说明 |
---|---|
turtle.clear() | 清空turtle窗口,但是turtle的位置和状态不会改变 |
turtle.reset() | 清空窗口,重置turtle状态为起始状态 |
turtle.undo() | 撤销上一个turtle动作 |
turtle.isvisible() | 返回当前turtle是否可见 |
stamp() | 复制当前图形 |
turtle.write(s[,font=(“font-name”,font_size,“font_type”)]) | 写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项 |
实例:画一棵漂亮的树
源代码:
import turtle
from random import *
from math import *
def tree(n,l):
turtle.pd()#下笔
#阴影效果
t = cos(radians(turtle.heading()+45))/8+0.25
turtle.pencolor(t,t,t)
turtle.pensize(n/3)
turtle.forward(l)#画树枝
if n>0:
b = random()*15+10 #右分支偏转角度
c = random()*15+10 #左分支偏转角度
d = l*(random()*0.25+0.7) #下一个分支的长度
#右转一定角度,画右分支
turtle.right(b)
tree(n-1,d)
#左转一定角度,画左分支
turtle.left(b+c)
tree(n-1,d)
#转回来
turtle.right(c)
else:
#画叶子
turtle.right(90)
n=cos(radians(turtle.heading()-45))/4+0.5
turtle.pencolor(n,n*0.8,n*0.8)
turtle.circle(3)
turtle.left(90)
#添加0.3倍的飘落叶子
if(random()>0.7):
turtle.pu()
#飘落
t = turtle.heading()
an = -40 +random()*40
turtle.setheading(an)
dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
turtle.forward(dis)
turtle.setheading(t)
#画叶子
turtle.pd()
turtle.right(90)
n = cos(radians(turtle.heading()-45))/4+0.5
turtle.pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
turtle.circle(2)
turtle.left(90)
turtle.pu()
#返回
t=turtle.heading()
turtle.setheading(an)
turtle.backward(dis)
turtle.setheading(t)
turtle.pu()
turtle.backward(l)#退回
turtle.bgcolor(0.5,0.5,0.5)#背景色
turtle.ht()#隐藏turtle
turtle.speed(0)#速度 1-10渐进,0 最快
turtle.tracer(0,0)
turtle.pu()#抬笔
turtle.backward(100)
turtle.left(90)#左转90度
turtle.pu()#抬笔
turtle.backward(300)#后退300
tree(12,100)#递归7层
turtle.done()
参考资料:https://www.jianshu.com/p/2d92a136813a
参考资料:https://www.cnblogs.com/nowgood/p/turtle.html