欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 包的使用 (三)——turtle:使用海龟图形(turtle graphics)绘制图像

程序员文章站 2022-05-28 22:06:44
...

 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

turtle绘图的基础知识:

1. 画布(canvas)

        画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

        设置画布大小

         turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。

        如:turtle.screensize(800,600, "green")

               turtle.screensize() #返回默认大小(400, 300)

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

        如:turtle.setup(width=0.6,height=0.6)

               turtle.setup(width=800,height=800, startx=100, starty=100)


2. 画笔

2.1 画笔的状态

        在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2 画笔的属性

        画笔(画笔的属性,颜色、画线的宽度等)

        1) turtle.pensize():设置画笔的宽度;

        2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。

        3) turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2.3 绘图命令

         操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1)    画笔运动命令

命令

说明

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.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

 

(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)    全局控制命令

命令

说明

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参数也是可选项

 

(4)    其他命令

命令

说明

turtle.mainloop()或turtle.done()

启动事件循环 -调用Tkintermainloop函数。

必须是乌龟图形程序中的最后一个语句。

turtle.mode(mode=None)

设置乌龟模式(“standard”“logo”“world”)并执行重置。如果没有给出模式,则返回当前模式。

模式

初始龟标题

正角度

standard

向右(东)

逆时针

logo

向上(北)

顺时针

turtle.delay(delay=None)

设置或返回以毫秒为单位的绘图延迟。

turtle.begin_poly()

开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.end_poly()

停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.get_poly()

返回最后记录的多边形。

 

3. 命令详解

        3.1 turtle.circle(radius, extent=None, steps=None)

        描述:以给定半径画圆

        参数:

        radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;

        extent(弧度) (optional);

        steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。

举例:

circle(50) # 整圆;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圆

 

实例:

1、太阳花

[python] view plain copy
  1. # coding=utf-8  
  2. import turtle  
  3. import time  
  4.   
  5. # 同时设置pencolor=color1, fillcolor=color2  
  6. turtle.color("red""yellow")  
  7.   
  8. turtle.begin_fill()  
  9. for _ in range(50):  
  10. turtle.forward(200)  
  11. turtle.left(170)  
  12. turtle.end_fill()  
  13.   
  14. turtle.mainloop()  

python 包的使用 (三)——turtle:使用海龟图形(turtle graphics)绘制图像


2、五角星

[python] view plain copy
  1. # coding=utf-8  
  2. import turtle  
  3. import time  
  4.   
  5. turtle.pensize(5)  
  6. turtle.pencolor("yellow")  
  7. turtle.fillcolor("red")  
  8.   
  9. turtle.begin_fill()  
  10. for _ in range(5):  
  11.   turtle.forward(200)  
  12.   turtle.right(144)  
  13. turtle.end_fill()  
  14. time.sleep(2)  
  15.    
  16. turtle.penup()  
  17. turtle.goto(-150,-120)  
  18. turtle.color("violet")  
  19. turtle.write("Done", font=('Arial'40'normal'))  
  20.   
  21. turtle.mainloop()  

python 包的使用 (三)——turtle:使用海龟图形(turtle graphics)绘制图像


3、时钟程序

[python] view plain copy
  1. # coding=utf-8  
  2.    
  3. import turtle  
  4. from datetime import *  
  5.    
  6. # 抬起画笔,向前运动一段距离放下  
  7. def Skip(step):  
  8.     turtle.penup()  
  9.     turtle.forward(step)  
  10.     turtle.pendown()  
  11.    
  12. def mkHand(name, length):  
  13.     # 注册Turtle形状,建立表针Turtle  
  14.     turtle.reset()  
  15.     Skip(-length * 0.1)  
  16.     # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。  
  17.     turtle.begin_poly()  
  18.     turtle.forward(length * 1.1)  
  19.     # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。  
  20.     turtle.end_poly()  
  21.     # 返回最后记录的多边形。  
  22.     handForm = turtle.get_poly()  
  23.     turtle.register_shape(name, handForm)  
  24.    
  25. def Init():  
  26.     global secHand, minHand, hurHand, printer  
  27.     # 重置Turtle指向北  
  28.     turtle.mode("logo")  
  29.     # 建立三个表针Turtle并初始化  
  30.     mkHand("secHand"135)  
  31.     mkHand("minHand"125)  
  32.     mkHand("hurHand"90)  
  33.     secHand = turtle.Turtle()  
  34.     secHand.shape("secHand")  
  35.     minHand = turtle.Turtle()  
  36.     minHand.shape("minHand")  
  37.     hurHand = turtle.Turtle()  
  38.     hurHand.shape("hurHand")  
  39.      
  40.     for hand in secHand, minHand, hurHand:  
  41.         hand.shapesize(113)  
  42.         hand.speed(0)  
  43.      
  44.     # 建立输出文字Turtle  
  45.     printer = turtle.Turtle()  
  46.     # 隐藏画笔的turtle形状  
  47.     printer.hideturtle()  
  48.     printer.penup()  
  49.       
  50. def SetupClock(radius):  
  51.     # 建立表的外框  
  52.     turtle.reset()  
  53.     turtle.pensize(7)  
  54.     for i in range(60):  
  55.         Skip(radius)  
  56.         if i % 5 == 0:  
  57.             turtle.forward(20)  
  58.             Skip(-radius - 20)  
  59.              
  60.             Skip(radius + 20)  
  61.             if i == 0:  
  62.                 turtle.write(int(12), align="center", font=("Courier"14"bold"))  
  63.             elif i == 30:  
  64.                 Skip(25)  
  65.                 turtle.write(int(i/5), align="center", font=("Courier"14"bold"))  
  66.                 Skip(-25)  
  67.             elif (i == 25 or i == 35):  
  68.                 Skip(20)  
  69.                 turtle.write(int(i/5), align="center", font=("Courier"14"bold"))  
  70.                 Skip(-20)  
  71.             else:  
  72.                 turtle.write(int(i/5), align="center", font=("Courier"14"bold"))  
  73.             Skip(-radius - 20)  
  74.         else:  
  75.             turtle.dot(5)  
  76.             Skip(-radius)  
  77.         turtle.right(6)  
  78.           
  79. def Week(t):     
  80.     week = ["星期一""星期二""星期三",  
  81.             "星期四""星期五""星期六""星期日"]  
  82.     return week[t.weekday()]  
  83.    
  84. def Date(t):  
  85.     y = t.year  
  86.     m = t.month  
  87.     d = t.day  
  88.     return "%s %d%d" % (y, m, d)  
  89.    
  90. def Tick():  
  91.     # 绘制表针的动态显示  
  92.     t = datetime.today()  
  93.     second = t.second + t.microsecond * 0.000001  
  94.     minute = t.minute + second / 60.0  
  95.     hour = t.hour + minute / 60.0  
  96.     secHand.setheading(6 * second)  
  97.     minHand.setheading(6 * minute)  
  98.     hurHand.setheading(30 * hour)  
  99.       
  100.     turtle.tracer(False)   
  101.     printer.forward(65)  
  102.     printer.write(Week(t), align="center",  
  103.                   font=("Courier"14"bold"))  
  104.     printer.back(130)  
  105.     printer.write(Date(t), align="center",  
  106.                   font=("Courier"14"bold"))  
  107.     printer.home()  
  108.     turtle.tracer(True)  
  109.    
  110.     # 100ms后继续调用tick  
  111.     turtle.ontimer(Tick, 100)  
  112.    
  113. def main():  
  114.     # 打开/关闭龟动画,并为更新图纸设置延迟。  
  115.     turtle.tracer(False)  
  116.     Init()  
  117.     SetupClock(160)  
  118.     turtle.tracer(True)  
  119.     Tick()  
  120.     turtle.mainloop()  
  121.    
  122. if __name__ == "__main__":  
  123.     main()  
python 包的使用 (三)——turtle:使用海龟图形(turtle graphics)绘制图像

from turtle import*
def nose(x,y):#鼻子
    penup()#提起笔
    goto(x,y)#定位
    pendown()#落笔,开始画
    setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)
    begin_fill()#准备开始填充图形
    a=0.4
    for i in range(120):
        if 0<=i<30 or 60<=i<90:
            a=a+0.08
            left(3) #向左转3度
            forward(a) #向前走a的步长
        else:
            a=a-0.08
            left(3)
            forward(a)
    end_fill()#填充完成
    penup()
    setheading(90)
    forward(25)
    setheading(0)
    forward(10)
    pendown()
    pencolor(255,155,192)#画笔颜色
    setheading(10)
    begin_fill()
    circle(5)
    color(160,82,45)#返回或设置pencolor和fillcolor
    end_fill()
    penup()
    setheading(0)
    forward(20)
    pendown()
    pencolor(255,155,192)
    setheading(10)
    begin_fill()
    circle(5)
    color(160,82,45)
    end_fill()
def head(x,y):#头
    color((255,155,192),"pink")
    penup()
    goto(x,y)
    setheading(0)
    pendown()
    begin_fill()
    setheading(180)
    circle(300,-30)
    circle(100,-60)
    circle(80,-100)
    circle(150,-20)
    circle(60,-95)
    setheading(161)
    circle(-300,15)
    penup()
    goto(-100,100)
    pendown()
    setheading(-30)
    a=0.4
    for i in range(60):
        if 0<=i<30 or 60<=i<90:
            a=a+0.08
            lt(3) #向左转3度
            fd(a) #向前走a的步长
        else:
            a=a-0.08
            lt(3)
            fd(a)
    end_fill()
def ears(x,y): #耳朵
    color((255,155,192),"pink")
    penup()
    goto(x,y)
    pendown()
    begin_fill()
    setheading(100)
    circle(-50,50)
    circle(-10,120)
    circle(-50,54)
    end_fill()
    penup()
    setheading(90)
    forward(-12)
    setheading(0)
    forward(30)
    pendown()
    begin_fill()
    setheading(100)
    circle(-50,50)
    circle(-10,120)
    circle(-50,56)
    end_fill()
def eyes(x,y):#眼睛
    color((255,155,192),"white")
    penup()
    setheading(90)
    forward(-20)
    setheading(0)
    forward(-95)
    pendown()
    begin_fill()
    circle(15)
    end_fill()
    color("black")
    penup()
    setheading(90)
    forward(12)
    setheading(0)
    forward(-3)
    pendown()
    begin_fill()
    circle(3)
    end_fill()
    color((255,155,192),"white")
    penup()
    seth(90)
    forward(-25)
    seth(0)
    forward(40)
    pendown()
    begin_fill()
    circle(15)
    end_fill()
    color("black")
    penup()
    setheading(90)
    forward(12)
    setheading(0)
    forward(-3)
    pendown()
    begin_fill()
    circle(3)
    end_fill()
def cheek(x,y):#腮
    color((255,155,192))
    penup()
    goto(x,y)
    pendown()
    setheading(0)
    begin_fill()
    circle(30)
    end_fill()
def mouth(x,y): #嘴
    color(239,69,19)
    penup()
    goto(x,y)
    pendown()
    setheading(-80)
    circle(30,40)
    circle(40,80)
def setting():          #参数设置
    pensize(4)
    hideturtle()        #使乌龟无形(隐藏)
    colormode(255)      #将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内
    color((255,155,192),"pink")
    setup(840,500)
    speed(10)
def main():
    setting()           #画布、画笔设置
    nose(-100,100)      #鼻子
    head(-69,167)       #头
    ears(0,160)         #耳朵
    eyes(0,140)         #眼睛
    cheek(80,10)        #腮
    mouth(-20,30)       #嘴
    done()
if __name__ == '__main__':
    main()
python 包的使用 (三)——turtle:使用海龟图形(turtle graphics)绘制图像
相关标签: turtle 绘图