海龟绘图(Turtle Graphics),python内置模块,是一个简单的绘图工具,使用海龟绘图可以编写重复执行简单动作的程序,从而画出精细复杂的形状。turtle中有画布(Canvas)和画笔两个工具元素。
画布是turtle模块用于绘图的区域,在该画布上有一个坐标轴,坐标原点在画布的中心
坐标系:turtle模块中的x轴正方向指向右侧,y轴正方向指向上方。坐标原点位于画布的中心。
主要介绍两个函数:
1、设置画布的大小和背景颜色
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
2、设置画布的大小和位置
turtle.setup(width, height, startx=None, starty=None)
turtle模块使用位置、方向描述画笔的状态。
默认情况下,画笔的坐标为坐标原点,方向指向x轴正方向,画笔处于放下状态。
画笔属性:颜色、画线的宽度、移动速度等。
turtle.pensize():设置画笔的宽度,数字越大,画笔越粗;
turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是rgb3元组。注意:当是rgb时,r、g、b取值为0.0~1.0之间。
例如:
turtle.pencolor(1.0, 0.0, 0.0)
#或者tup1=(1.0, 0.0, 0.0)
#turtle.pencolor(tup1) #当然列表等其他可迭代序列也可以。同样也可以使用turtle.pencolor((tup1))
turple.pencolor("red")
turtle.pencolor("#32c18f")
turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快,移动速度越快。
绘图命令通常分为3类:画笔移动命令、画笔控制命令、全局控制命令。
turtle.penup() #提起画笔
turtle.pendown() #放下画笔,开始默认状态
turtle.forward(distance)#向当前画笔方向移动distance像素长度
turtle.backward(distance) #向当前画笔相反方向移动distance像素长度
turtle.right(degree) #顺时针移动degree°
turtle.left(degree) #逆时针移动degree°
turtle.goto(x,y) #将画笔移动到坐标为x,y的位置
setx( ) #将当前x轴移动到指定位置
sety( ) #将当前y轴移动到指定位置
turtle.circle() #画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
setheading(angle) #设置当前朝向为angle角度
home() #将画笔回到原点,并且将画笔指向右侧。注意:当笔放下时,会留下移动到痕迹。
dot(r,color)
#绘制一个直径为size,颜色为 color 的圆点。
#若size未指定,则直径取pensize+4和2*pensize中的较大值。
#若未指定color则color为pencolor。
turtle.fillcolor(colorstring) #绘制图形的填充颜色
turtle.color(color1, color2) #同时设置pencolor=color1, fillcolor=color2
turtle.filling() #返回当前是否在填充状态
turtle.begin_fill() #准备开始填充图形
turtle.end_fill() #填充完成
turtle.hideturtle() #隐藏画笔的turtle形状
turtle.showturtle() #显示画笔的turtle形状
turtle.done() #使绘图窗口不会自动消失
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是字体的参数,分别为字体名称,大小和类型;
示例1,绘制五角星:
import turtle
t=turtle.Turtle() #创建turtle对象(建议方式)这样就可以创建多个画笔了
t.pencolor("red") #设置画笔颜色为红色
t.penup() #先提画笔
t.goto(-100,100) #移动画笔位置,使最后的图像居中
t.pendown() #放画笔
t.speed(2) #控制画笔速度
t.fillcolor("red") #填充颜色为红色
t.begin_fill() #开始填充颜色
for i in range(0,5):
t.forward(200)
t.right(144)
t.end_fill() #停止填充
t.hideturtle() #隐藏画笔的turtle形状
turtle.done() #使turtle窗口不会自动消失
运行截图:
示例2,绘制一个勋章——一个圆里嵌套一个五角星:
import math
import turtle
turtle.colormode(255) #切换颜色模式,turtle.colormode(cmode=None)返回颜色模式或将其设为 1.0 或 255。有1.0模式和255模式
t1=turtle.Turtle()
t2=turtle.Turtle() #创建两个对象,turtle1用来画圆,turtle2用来画五角星
#画圆
r=100 #半径为100
t1.color((217,217,25),(217,217,25)) #前面一个参数是pencolor,后一个参数是fillcolor
t1.pensize(3)
t1.penup()
t1.goto(0,200)
t1.pendown()
t1.begin_fill()
t1.circle(r*(-1)-10) #其实原本半径为100,但是为了美观,就将半径放大了
t1.end_fill()
t1.hideturtle()
#画五角星
t2.color("red","red")
t2.penup()
t2.goto(r*(-1)*math.cos(math.pi/10),r*math.sin(math.sin(math.pi/10))+r)
t2.pendown()
t2.begin_fill()
for i in range(0,5):
t2.forward(100*math.cos(math.pi/10)*2)
t2.right(144)
t2.end_fill()
t2.hideturtle()
turtle.done()
效果如下图: