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


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

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

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

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

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

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

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

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

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

    1. def draw_circle(x, y, c):
    2. # 抬起画笔
    3. turtle.pu()
    4. # 画圆的开始位置
    5. turtle.goto(x, y)
    6. # 放下画笔
    7. turtle.pd()
    8. turtle.color(c)
    9. turtle.circle(40, 360)

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

    1. # 设置画笔尺寸
    2. turtle.pensize(3)
    3. # 画五个圆环
    4. draw_circle(0, 0, 'blue')
    5. draw_circle(60, 0, 'black')
    6. draw_circle(120, 0, 'red')
    7. draw_circle(90, -30, 'green')
    8. draw_circle(30, -30, 'yellow')
    9. # 结束
    10. turtle.done()

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

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

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

    导入依赖模块:

    1. from turtle import *
    2. import time

    第一步,画红色背景区域

    1. def draw_bg():
    2. speed(10) # 控制画笔速度
    3. up() # 抬笔
    4. goto(-200, 200) # 跳到指定位置
    5. down() # 落笔
    6. color("red", "red") # 设置线条色和填充色
    7. begin_fill()
    8. forward(480)
    9. right(90)
    10. forward(320)
    11. left(90)
    12. backward(480)
    13. right(90)
    14. backward(320)
    15. end_fill()

    第二步,画大五角星

    1. def draw_big_star():
    2. up()
    3. forward(64)
    4. left(90)
    5. forward(32)
    6. down()
    7. # 画大五角星
    8. a = 96
    9. color("yellow", "yellow")
    10. begin_fill()
    11. for i in range(1, 6):
    12. forward(a)
    13. right(144)
    14. speed(2)
    15. end_fill()

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

    1. def draw_first_small_star():
    2. up()
    3. forward(96)
    4. left(53)
    5. forward(36)
    6. # 第一个小五角星
    7. a = 32
    8. begin_fill()
    9. for i in range(1, 6):
    10. forward(a)
    11. right(144)
    12. speed(5)
    13. end_fill()

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

    1. def draw_second_small_star():
    2. up()
    3. right(80)
    4. forward(42)
    5. left(55)
    6. # 第二个小五角星
    7. a = 32
    8. begin_fill()
    9. for i in range(1, 6):
    10. forward(a)
    11. right(144)
    12. speed(5)
    13. end_fill()

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

    1. def draw_third_small_star():
    2. up()
    3. right(96)
    4. forward(32)
    5. # 第三个小五角星
    6. a = 32
    7. begin_fill()
    8. for i in range(1, 6):
    9. forward(a)
    10. right(144)
    11. speed(5)
    12. end_fill()

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

    1. def draw_four_small_star():
    2. up()
    3. right(54)
    4. forward(45)
    5. right(30)
    6. # 最后一个小五角星
    7. a = 32
    8. begin_fill()
    9. for i in range(1, 6):
    10. forward(a)
    11. right(144)
    12. speed(2)
    13. end_fill()

    最后,执行测试

    1. if __name__ == '__main__':
    2. draw_bg()
    3. draw_big_star()
    4. draw_first_small_star()
    5. draw_second_small_star()
    6. draw_third_small_star()
    7. draw_four_small_star()
    8. ht()
    9. time.sleep(10)

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

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

    多啦爱梦 ----> 如下:

    皮卡丘 ----> 如下:

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

    参考资料:

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

  • 相关阅读:
    Ubuntu 22.04(LinuxMint 21)编译wine7.19安装最新微信3.7.6及QQ体会
    哈希表原理、底层实现剖析
    Vuex数据持久化存储
    ubuntu 多版本cmake共存的终极方法
    Python爬虫——爬取某网站的视频
    从源码看std::weak_ptr
    【设计模式】单例模式 Singleton Pattern
    df -h 显示/根目录占100%
    Leetcode198. 打家劫舍
    缺少比较器,运放来救场!(运放当做比较器电路记录)
  • 原文地址:https://blog.csdn.net/qq_29119581/article/details/128088094