【Python模块】图形化编程模块-turtle

  • Post author:
  • Post category:python



Turtle,也称海龟渲染器,是 Python 内置的图形化模块,它使用 tkinter 实现基本图形界面,因此 当前使用的 Python 环境需要支持 tkinter。


Turtle 提供了面向对象和面向过程两种形式的海龟绘图基本组件。使用它可以轻松的实现图形的绘制,它和各种三维软件都有着良好的结合,功能强大,使用方便,也成为了 Python 兴趣编程的选择。


图形绘制的原理也很简单,通过小海龟在画布上移动留下的轨迹表示画出的图形。因此,使用海龟绘图可以编写重复执行简单动作的程序,从而画出精细复杂的形状。


Turtle 模块常用的 API,参考如下:


如果我们能熟练掌握这些 API 的含义和使用,基本可以天马行空般的画各种东西了。


举个例子,画个病毒模样的图形:

# 颜色设置:参数1为画笔颜色,参数2为填充色
turtle.color('red', 'blue')
# 开始填充
turtle.begin_fill()
# 循环的前进200,再左转170,如果距画笔位置<1,则结束循环
while True:
    turtle.forward(200)
    turtle.left(170)
    if abs(turtle.pos()) < 1:
        break
# 结束填充
turtle.end_fill()
turtle.done()


执行上述代码后,最终绘出的图形效果如下:




再画个更简单的奥运五环,思路就是重复的画五个圆。当然,要先写个重复画圆的方法,如下:

def draw_circle(x, y, c):
    # 抬起画笔
    turtle.pu()
    # 画圆的开始位置
    turtle.goto(x, y)
    # 放下画笔
    turtle.pd()
    turtle.color(c)
    turtle.circle(40, 360)


接着,设置不同的圆心坐标和圆环颜色就可以了,如下:

# 设置画笔尺寸
turtle.pensize(3)
# 画五个圆环
draw_circle(0, 0, 'blue')
draw_circle(60, 0, 'black')
draw_circle(120, 0, 'red')
draw_circle(90, -30, 'green')
draw_circle(30, -30, 'yellow')
# 结束
turtle.done()


执行上述代码后,最终绘出的图形效果如下:


现在应该能体味到兴趣编程的含义了吧,只要控制好”这只小乌龟”的行走轨迹,就能画出任何的图形,而且这种面向过程的编程也简单易懂。


下面来个稍微复杂点的,画出国旗的图案,思路也不难,就是要绘制红色背景区域,五颗黄色五角星就行。


导入依赖模块:

from turtle import *
import time


第一步,画红色背景区域

def draw_bg():
    speed(10)  # 控制画笔速度
    up()  # 抬笔
    goto(-200, 200)  # 跳到指定位置
    down()  # 落笔
    color("red", "red")  # 设置线条色和填充色
    begin_fill()
    forward(480)
    right(90)
    forward(320)
    left(90)
    backward(480)
    right(90)
    backward(320)
    end_fill()


第二步,画大五角星

def draw_big_star():
    up()
    forward(64)
    left(90)
    forward(32)
    down()
    # 画大五角星
    a = 96
    color("yellow", "yellow")
    begin_fill()
    for i in range(1, 6):
        forward(a)
        right(144)
        speed(2)
    end_fill()


第三步,画第一颗小五角星

def draw_first_small_star():
    up()
    forward(96)
    left(53)
    forward(36)
    # 第一个小五角星
    a = 32
    begin_fill()
    for i in range(1, 6):
        forward(a)
        right(144)
        speed(5)
    end_fill()


第四步,画第二颗小五角星

def draw_second_small_star():
    up()
    right(80)
    forward(42)
    left(55)

    # 第二个小五角星
    a = 32
    begin_fill()
    for i in range(1, 6):
        forward(a)
        right(144)
        speed(5)
    end_fill()


第五步,画第三颗小五角星

def draw_third_small_star():
    up()
    right(96)
    forward(32)

    # 第三个小五角星
    a = 32
    begin_fill()
    for i in range(1, 6):
        forward(a)
        right(144)
        speed(5)
    end_fill()


第六步,画第四颗小五角星

def draw_four_small_star():
    up()
    right(54)
    forward(45)
    right(30)

    # 最后一个小五角星
    a = 32
    begin_fill()
    for i in range(1, 6):
        forward(a)
        right(144)
        speed(2)
    end_fill()


最后,执行测试

if __name__ == '__main__':
    draw_bg()
    draw_big_star()
    draw_first_small_star()
    draw_second_small_star()
    draw_third_small_star()
    draw_four_small_star()
    ht()
    time.sleep(10)


画出来的最终效果,如下所示:




当然,画各种感兴趣的卡通人物更不在话下了,比如多啦爱梦、小猪佩奇、皮卡丘等。


多啦爱梦 —-> 如下:




皮卡丘 —-> 如下:




如果需要这些代码,后面会上传到我的 Github 上~​​​​​​​


参考资料:


【人生苦短,学习Python!Python模块系列将持续更新和记录……】



版权声明:本文为qq_29119581原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。