1、turtle的介绍及基础知识

1.1、介绍turtle模块

海龟绘图(Turtle Graphics),python内置模块,是一个简单的绘图工具,使用海龟绘图可以编写重复执行简单动作的程序,从而画出精细复杂的形状。turtle中有画布(Canvas)和画笔两个工具元素。

2、画布

2.1、介绍画布

画布是turtle模块用于绘图的区域,在该画布上有一个坐标轴,坐标原点在画布的中心

坐标系:turtle模块中的x轴正方向指向右侧,y轴正方向指向上方。坐标原点位于画布的中心。

2.2、画布的使用

主要介绍两个函数:

1、设置画布的大小和背景颜色

turtle.screensize(canvwidth=None, canvheight=None, bg=None)

  • canvwidth:画布的宽度
  • canvheight:画布的高度
  • bg:背景颜色
  •  当宽度或者高度为整数时表示的是像素;小数时, 表示占据电脑屏幕的比例。当高度或者宽度超过窗口大小时,会出现滚动条。
  • 若不设置值,默认参数为(400,300,None)
  • 2、设置画布的大小和位置

    turtle.setup(width, height, startx=None, starty=None)
  • width,height:输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例
  • (startx,starty):这一坐标表示矩形窗口左上角顶点的位置。如果为空,则窗口位于屏幕中心
  • 3、画笔

    3.1、画笔状态

    turtle模块使用位置方向描述画笔的状态。

    默认情况下,画笔的坐标为坐标原点,方向指向x轴正方向,画笔处于放下状态。

    3.2、画笔的属性

    画笔属性:颜色、画线的宽度、移动速度等。

    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.3、绘图命令

    绘图命令通常分为3类:画笔移动命令、画笔控制命令、全局控制命令。

    3.3.1、画笔移动命令

    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。

    3.3.2、画笔控制命令

    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形状
    

    3.3.3、全局控制命令

    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是字体的参数,分别为字体名称,大小和类型;

    4、示例

    示例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()
    

    效果如下图:

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中turtle绘图模块

    发表回复