当前位置 博文首页 > 想学画画?python满足你!

    想学画画?python满足你!

    作者:python客栈 时间:2021-02-19 18:38

    python中的绘图工具有不少,比如Matplotlib等等,但这些只能用来画表格,今天我们来介绍一款可以用来画画的库——turtle。

    一、绘图原理

    我们通过控制初始位置为(0,0)的海龟进行移动,根据一组函数指令的控制,在平面坐标系中移动,从而在它爬行的路径上绘制了图形。

    二、开始绘图

    turtle是python自带的库,我们直接import导入即可

    import turtle

    设置绘图区域属性

    绘图区域背景色的设置

    turtle.bgcolor('blue')

    选择想要的颜色即可

    绘图区域大小设置

    turtle.setup(width=200,height=100)

    参数:

    width, height: 

    输入宽和高为整数时, 表示像素;

    为小数时, 表示占据电脑屏幕的比例。

    画笔绘制图形

    让我们先简单的画一条直线

    turtle.forward(100)

    forward()是turtle的内置函数,表示从原点向前进多少距离。我们还可以控制画笔的角度让他转弯。与之对应的是backward(),后退多少距离

    turtle.backward(100)
    turtle.left(60)
    turtle.forward(100)

    这里的left()就表示画笔的转弯方向和角度了,相应的right则为向右转。

    如图我们后退了100的距离然后向左偏转60°又前进了100距离。其他常用参数请参考下面的表格

    画笔运动函数

    函数 描述
    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的参数也是可选项

    三、for循环语句

    如果我们要画一个正方形按照上边的方法代码为

    import turtle
    
    turtle.forward(100)
    turtle.left(90)
    turtle.forward(100)
    turtle.left(90)
    turtle.forward(100)
    turtle.left(90)
    turtle.forward(100)
    turtle.left(90)

    一个简单的四边形就要如此重复,绘制更复杂的图形还这样做的话就显得不科学了,这时候我们就要用到for循环了。使用for循环的语句优化过的代码为

    totalTimes=4                       
    for times in range(totalTimes):
        turtle.forward(100)
        turtle.left(90)

    四、简单示例

    绘制五角星

    import turtle
    
    t=turtle.Pen() #获得画笔
    t.hideturtle() #隐藏箭头
    t.begin_fill() #填充图形
    for x in range(1, 6):
        t.forward(100)
        t.left(216) #在这里先向右直行,然后左转216°(左下,正五角星度数180/5=36°)
    t.end_fill() #填充完成

    绘制樱花树

    import turtle as T
    import random
    import time
     
    # 画樱花的躯干(60,t)
    def Tree(branch, t):
      time.sleep(0.0005)
      if branch > 3:
        if 8 <= branch <= 12:
          if random.randint(0, 2) == 0:
            t.color('snow') # 白
          else:
            t.color('lightcoral') # 淡珊瑚色
          t.pensize(branch / 3)
        elif branch < 8:
          if random.randint(0, 1) == 0:
            t.color('snow')
          else:
            t.color('lightcoral') # 淡珊瑚色
          t.pensize(branch / 2)
        else:
          t.color('sienna') # 赭(zhě)色
          t.pensize(branch / 10) # 6
        t.forward(branch)
        a = 1.5 * random.random()
        t.right(20 * a)
        b = 1.5 * random.random()
        Tree(branch - 10 * b, t)
        t.left(40 * a)
        Tree(branch - 10 * b, t)
        t.right(20 * a)
        t.up()
        t.backward(branch)
        t.down()
     
    # 掉落的花瓣
    def Petal(m, t):
      for i in range(m):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        t.color('lightcoral') # 淡珊瑚色
        t.circle(1)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)
     
    # 绘图区域
    t = T.Turtle()
    # 画布大小
    w = T.Screen()
    t.hideturtle() # 隐藏画笔
    t.getscreen().tracer(5, 0)
    w.screensize(bg='wheat') # wheat小麦
    t.left(90)
    t.up()
    t.backward(150)
    t.down()
    t.color('sienna')
     
    # 画樱花的躯干
    Tree(60, t)
    # 掉落的花瓣
    Petal(200, t)
    w.exitonclick()

    更多关于python的文章,欢迎关注python客栈。

    js
    下一篇:没有了