一、turtle简单介绍
1.Turtle库是python语言中一个很流行的函数库,基于thinker模块打造,提供一些比较简单的绘画工具,通过一组或多组函数指令的控制,在坐标系中移动,绘制图形
2.Turtle库近年来也多被用于新手学习python的一种方式
二、Turtle基础知识
1.创建窗口(或画布Canvas)
1.1画布为我们用来展开绘图区域,可以选择它的大小和初始位置
大小turtle.screensize(canvwidth=None, canvheight=None, bg=None)
canvwidth
:画布的宽(单位像素,默认值400)
canvheight
:画布的高(单位像素,默认值300)
背景颜色
1|t.screensize(800,600,'blue')
2|turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
2、画笔(pen)
2.1画笔(pen)的设置包括画笔属性(如尺寸、颜色)和画笔状态。Turtle模块已经定义了画笔属性和状态的函数。
(1)设置画笔属性
pensize(<width>) #设置画笔尺寸
speed(speed) #设置画笔移动速度
color(color) #设置画笔颜色
width()
函数是pensize()
函数的别名,它们具有相同的功能。
speed()
函数的参数speed
用于设置画笔移动的速度,其取值范围为[0,10]内的整数。数值越大,速度越快。
color()
函数的参数用于设置画笔颜色,该参数值有以下几种表达方式:
-字符串,如"red",“orange”,“yellow”,“green”。
-RGB颜色,又分为RGB整数值和RGB小数值两种,整数值如(255,255,255),(190,213,98),小数值如(1,1,1),(0.65,0.7,0.9)。
-十六进制颜色,如"#FFFFFF"
,"#0060F6"
-常见颜色表示方法及其对应关系
(2)画笔状态及相关函数
Turtle库中画笔分为提起(UP)和放下(DOWN)两种状态
import turtle
turtle.penup() #提起画笔
turtle.pendown() #放下画笔
turtle.done()
turtle模块中penup()
和pendown()
函数定义了别名,penup()
函数的别名为pu()
,pendown()
函数的别名为pd()
。
3.绘制图形
3.1Turtle模块中画笔分为移动控制、角度控制、图形控制和图形填充3种。
(1)移动控制
移动控制函数控制画笔向前、向后移动
foward(distance) #向前移动
backward(distance) #向后移动
goto(x,y=None) #移动到指定位置
函数forward()
和backward()
的参数distance
用于指定画笔移动的距离,单位为像素;函数goto()
用于将画笔移动到画布上指定的位置,该函数可以使用参数x、y分别接受表示目标位置的横坐标和纵坐标,也可以接受一个表示坐标向量的参数。
(2)角度控制
角度控制函数可以更改笔画朝向
right(degree) #向右移动
left(degree) #向左移动
seth(angle) #转动到某个方向
函数right()
和left()
的参数degree
用于指定画笔向右和向左转动的角度。函数seth()
的参数angle
用于设置画笔在坐标系中的角度。angle
以x轴正向为0°,以逆时针为正,角度从0°逐渐增大;以顺时针方向为负,角度从0°逐渐减小。
若要使画笔向右或向左移动某段距离,应先调整画笔角度,在使用移动函数。
绘制边长为100像素的正方形
import turtle as t
t.forward(100)
t.seth(-90)
t.forward(100)
t.right(90)
t.forward(100)
t.left(-90)
t.forward(100)
t.right(90)
turtle.done()
运行代码
(3)图形绘制
turtle模块中提供了circle()
函数,使用该函数可绘制以当前坐标为圆心,以指定像素值为半径的圆和弧。circle()
函数的语法格式如下:
circle(radius,extent=None,steps=None
函数circle()
的参数radius
用于设置半径,extent
用于设置弧的角度。radius
和extent
的取值可正可负;参数steps
用于设置步长,若steps
默认值为None
步长将自动计算;若给出步长,circle()
函数可用于绘制正多边形
(4)图形填充
Turtle模块中可通过fillcolor()
函数设置填充颜色,使用begin_fill()
函数和end_fill()
函数填充图形,实现“画”的绘制
填充一个红色的圆为例:
import turtle
turtle.fillcolor("red") #设置填充颜色
turtle.begin_fill() #开始填充
turtle.circle(20)
turtle.end_fill() #结束填充
turtle.done()
三、用turtle绘制图形
1.绘制樱花
from turtle import *
from random import *
from math import *
def tree(n,l):
pd()#下笔
#阴影效果
t = cos(radians(heading()+45))/8+0.25
pencolor(t,t,t)
pensize(n/3)
forward(l)#画树枝
if n>0:
b = random()*15+10 #右分支偏转角度
c = random()*15+10 #左分支偏转角度
d = l*(random()*0.25+0.7) #下一个分支的长度
#右转一定角度,画右分支
right(b)
tree(n-1,d)
#左转一定角度,画左分支
left(b+c)
tree(n-1,d)
#转回来
right(c)
else:
#画叶子
right(90)
n=cos(radians(heading()-45))/4+0.5
pencolor(n,n*0.8,n*0.8)
circle(3)
left(90)
#添加0.3倍的飘落叶子
if(random()>0.7):
pu()
#飘落
t = heading()
an = -40 +random()*40
setheading(an)
dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
forward(dis)
setheading(t)
#画叶子
pd()
right(90)
n = cos(radians(heading()-45))/4+0.5
pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
circle(2)
left(90)
pu()
#返回
t=heading()
setheading(an)
backward(dis)
setheading(t)
pu()
backward(l)#退回
bgcolor(0.5,0.5,0.5)#背景色
ht()#隐藏turtle
speed(0)#速度 1-10渐进,0 最快
tracer(0,0)
pu()#抬笔
backward(100)
left(90)#左转90度
pu()#抬笔
backward(300)#后退300
tree(12,100)#递归7层
done()