通过Turtle库在Python中绘制一个鼠年福鼠


Posted in Python onFebruary 03, 2020

turtle库是一个很经典的绘图库,其最初来自于1967年创造的logo编程语言,之后被Python编写放到了Python的内置模块中。网络上有很多借助于turtle绘制精美图像的案例。比如小猪佩奇、皮卡丘、柯基犬等等。趁着新年假期还未结束,今天州的先生(https://zmister.com)为大家带来一个福鼠的绘制。

一、绘制鼠头

首先,咱们(https://zmister.com)把鼠的头给绘制了。鼠头主要是由圆来构成,脸庞是一个大圆,耳朵、眉毛、眼睛、嘴角和鼻子也都是由不同弧度的圆构成。鼠头的绘制代码如下所示:

def head():
 turtle.color('black')

 # 脸轮廓
 turtle.pd() # 落笔
 turtle.circle(50) # 画一个半径为50的圆
 turtle.pu() # 提笔

 # 右耳轮廓
 turtle.goto(50,60) # 移动到x=50,y=60的位置
 turtle.pd() # 落笔
 turtle.circle(30,260) # 画一个半径为30,角度为245的圆弧
 turtle.pu() # 提笔
 # 右耳耳纹
 turtle.goto(30,90)
 turtle.pd()
 turtle.seth(65)
 turtle.circle(-30,70)
 turtle.pu()

 # 左耳轮廓
 turtle.goto(-50,60)
 turtle.pd()
 turtle.seth(180) # 设置方向为西,
 turtle.circle(-30,260)
 turtle.pu()
 # 左耳耳纹
 turtle.goto(-30,90)
 turtle.pd()
 turtle.seth(120)
 turtle.circle(30,70)
 turtle.pu()

 # 面部五官
 # 右侧眉毛
 turtle.goto(5,80)
 turtle.seth(20)
 turtle.pd()
 turtle.circle(-25,40)
 turtle.pu()
 # 左侧眉毛
 turtle.goto(-5,80)
 turtle.seth(160)
 turtle.pd()
 turtle.circle(25,40)
 turtle.pu()

 # 右侧眼睛
 turtle.begin_poly()
 turtle.goto(8,60)
 turtle.seth(45)
 turtle.pd()
 turtle.circle(-15,120)
 turtle.pu()
 turtle.goto(8,60)
 turtle.seth(40)
 turtle.pd()
 turtle.circle(-15,100)
 turtle.pu()
 turtle.end_poly()

 # 左侧眼睛
 turtle.goto(-8,60)
 turtle.seth(135)
 turtle.pd()
 turtle.circle(15,120)
 turtle.pu()
 turtle.goto(-8,60)
 turtle.seth(140)
 turtle.pd()
 turtle.circle(15,100)
 turtle.pu()

 # 鼻子
 # 鼻子上瓣
 turtle.goto(-6,45)
 turtle.seth(70)
 turtle.pd()
 turtle.circle(-6,150)
 turtle.pu()
 # 鼻子下瓣
 turtle.goto(-6,45)
 turtle.seth(-70)
 turtle.pd()
 turtle.circle(6,150)
 turtle.pu()

 # 鼻线
 turtle.goto(0,40)
 turtle.seth(270)
 turtle.pd()
 turtle.forward(7)
 turtle.pu()

 # 上嘴线
 turtle.seth(200)
 turtle.pd()
 turtle.circle(-15,60)
 turtle.pu()

 turtle.goto(0,33)
 turtle.seth(-20)
 turtle.pd()
 turtle.circle(15,60)
 turtle.pu()

 # 下嘴线
 turtle.goto(10,33)
 turtle.seth(260)
 turtle.pd()
 turtle.circle(-15,65)
 turtle.pu()

 turtle.goto(-10,33)
 turtle.seth(280)
 turtle.pd()
 turtle.circle(15,65)
 turtle.pu()

 # 牙齿
 turtle.goto(4,33)
 turtle.seth(270)
 turtle.pd()
 turtle.forward(4)
 turtle.seth(180)
 turtle.forward(8)
 turtle.seth(90)
 turtle.forward(4)
 turtle.pu()

 # 胡须
 turtle.pensize(2)
 turtle.goto(30,30)
 turtle.seth(8)
 turtle.pd()
 turtle.circle(-60,40)
 turtle.pu()

 turtle.goto(30,25)
 turtle.seth(-5)
 turtle.pd()
 turtle.circle(-60,40)
 turtle.pu()


 turtle.goto(-30,30)
 turtle.seth(172)
 turtle.pd()
 turtle.circle(60,40)
 turtle.pu()

 turtle.goto(-30,25)
 turtle.seth(188)
 turtle.pd()
 turtle.circle(60,40)
 turtle.pu()

 # 睫毛
 turtle.pensize(1)
 turtle.goto(30,58)
 turtle.seth(20)
 turtle.pd()
 turtle.circle(20,20)
 turtle.pu()

 turtle.pensize(1)
 turtle.goto(28,62)
 turtle.seth(25)
 turtle.pd()
 turtle.circle(20,12)
 turtle.pu()

 turtle.pensize(1)
 turtle.goto(-30,58)
 turtle.seth(160)
 turtle.pd()
 turtle.circle(-20,20)
 turtle.pu()

 turtle.pensize(1)
 turtle.goto(-28,62)
 turtle.seth(165)
 turtle.pd()
 turtle.circle(-20,12)
 turtle.pu()

运行上述代码,我们可以看到鼠头可以完整地绘制出来了,如下动图所示:

通过Turtle库在Python中绘制一个鼠年福鼠

二、绘制身体

接着,咱们来绘制老鼠的身体。我们(https://zmister.com)画的这个老鼠是一个穿着财神服站立拱手的老鼠,所以它的身体需要重点突出的是服装:

def body():
 # 左手
 turtle.goto(-25,8)
 turtle.seth(240)
 turtle.pd()
 turtle.circle(150,15)
 turtle.seth(270)
 turtle.circle(40,15)
 turtle.circle(15,65)
 turtle.seth(0)
 turtle.forward(10)
 turtle.circle(10,100)
 turtle.seth(90)
 turtle.forward(5)
 turtle.circle(10,100)
 turtle.seth(180)
 turtle.forward(10)
 turtle.pu()
 # 右手
 turtle.goto(25,8)
 turtle.seth(-60)
 turtle.pd()
 turtle.circle(-150,15)
 turtle.seth(270)
 turtle.circle(-40,15)
 turtle.circle(-15,65)
 turtle.seth(180)
 turtle.forward(10)
 turtle.circle(-10,100)
 turtle.seth(90)
 turtle.forward(5)
 turtle.circle(-10,100)
 turtle.seth(0)
 turtle.forward(10)
 turtle.pu()

 # 袍子
 turtle.goto(-30,-48)
 turtle.seth(270)
 turtle.pd()
 turtle.forward(30)
 turtle.circle(10,100)
 turtle.seth(0)
 turtle.forward(38)
 turtle.circle(10,100)
 turtle.seth(90)
 turtle.forward(30)
 turtle.pu()

 # 领口
 turtle.goto(-20,4)
 turtle.pd()
 turtle.seth(300)
 turtle.circle(30,20)
 turtle.seth(0)
 turtle.forward(25)
 turtle.seth(30)
 turtle.circle(30,20)
 turtle.pu()

 # 官带
 turtle.goto(-7,-38)
 turtle.seth(0)
 turtle.pd()
 turtle.forward(15)
 turtle.pu()
 turtle.goto(-30,-54)
 turtle.pd()
 turtle.forward(60)
 turtle.pu()

 # 袍子上的波浪
 turtle.goto(-30,-80)
 turtle.pd()
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.pu()

 turtle.goto(-25,-85)
 turtle.pd()
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.seth(90)
 turtle.circle(-5,180)
 turtle.pu()

运行上述代码,我们可以看到老鼠身体的绘制过程,如下动图所示:

通过Turtle库在Python中绘制一个鼠年福鼠

这里先不将其汇合在一起,待几个部件都完成之后,我们再将其组成一个完整地老鼠。

三、绘制手

上面绘制的身体还缺了两只手,对了,还有袍子上的一个大金钱,我们将其补上:

def hands():
 turtle.goto(-8, -25)
 turtle.pd()
 turtle.seth(30)
 turtle.forward(10)
 turtle.seth(0)
 turtle.circle(-10, 50)
 turtle.seth(210)
 turtle.forward(18)

 turtle.back(10)
 turtle.seth(-45)
 turtle.forward(10)
 turtle.back(10)
 turtle.seth(30)
 turtle.forward(8)
 turtle.seth(300)
 turtle.forward(5)
 turtle.pu()

 turtle.goto(0, -75)
 turtle.pd()
 turtle.seth(0)
 turtle.circle(10)
 turtle.seth(90)
 turtle.circle(10, 90)
 turtle.seth(0)
 turtle.circle(10, 90)
 turtle.seth(270)
 turtle.circle(10, 90)
 turtle.seth(180)
 turtle.circle(10, 90)
 turtle.pu()

拱手和金钱没有和身体结合在一起时,暂时看不出上面效果来,如下动图所示:

通过Turtle库在Python中绘制一个鼠年福鼠

四、绘制帽子

老鼠还戴了一顶金钱帽,咱们(zmister.com)现在给它加上:

def hat():
 # 画帽子
 turtle.goto(-20,98)
 turtle.pd()
 turtle.seth(80)
 turtle.forward(20)
 turtle.seth(60)
 turtle.circle(-20,140)
 turtle.seth(-85)
 turtle.forward(18)
 turtle.pu()

 turtle.goto(-20,98)
 turtle.pd()
 turtle.seth(80)
 turtle.forward(5)
 turtle.seth(30)
 turtle.forward(22)
 turtle.seth(-25)
 turtle.forward(24)
 turtle.pu()

 turtle.goto(0,127)
 turtle.pd()
 turtle.seth(0)
 turtle.circle(5)
 turtle.pu()

 turtle.goto(0,125)
 turtle.pd()
 turtle.seth(270)
 turtle.forward(10)
 turtle.pu()

 # 右边抖带
 turtle.goto(19,110)
 turtle.pd()
 turtle.seth(30)
 turtle.circle(40,50)
 turtle.seth(0)
 turtle.circle(10)
 turtle.seth(90)
 turtle.circle(10,90)
 turtle.seth(0)
 turtle.circle(10,90)
 turtle.seth(270)
 turtle.circle(10,90)
 turtle.seth(180)
 turtle.circle(10,90)
 turtle.pu()

 # 左边抖带
 turtle.goto(-19,110)
 turtle.pd()
 turtle.seth(150)
 turtle.circle(-40,50)
 turtle.seth(0)
 turtle.circle(10)
 turtle.seth(90)
 turtle.circle(10,90)
 turtle.seth(0)
 turtle.circle(10,90)
 turtle.seth(270)
 turtle.circle(10,90)
 turtle.seth(180)
 turtle.circle(10,90)
 turtle.pu()

帽子主要都是由圆构成,其绘制过程如下动图所示:

通过Turtle库在Python中绘制一个鼠年福鼠

五、绘制尾巴

先不着急为老鼠带上金钱帽,我们还忘记了老鼠有一根长长的尾巴,为它补上吧:

def tail():
 turtle.goto(30, -60)
 turtle.pd()
 turtle.seth(20)
 turtle.circle(40, 80)
 turtle.circle(-20, 180)
 turtle.circle(-10, 90)

尾巴就是两个方向相反弧度不同的圆,效果我们就不演示了。最后将其结合在一起:

if __name__ == '__main__':
 head()
 body()
 hands()
 hat()
 tail()
 turtle.done()

我们就可以看到一个完整的鼠年福鼠绘制过程,如下动图所示:

通过Turtle库在Python中绘制一个鼠年福鼠

总结

以上所述是小编给大家介绍的通过Turtle库在Python中绘制一个鼠年福鼠,希望对大家有帮助!

Python 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
python实现图片批量剪切示例
Mar 25 Python
Python Queue模块详解
Nov 30 Python
探究数组排序提升Python程序的循环的运行效率的原因
Apr 01 Python
python基于socket实现网络广播的方法
Apr 29 Python
用Python抢过年的火车票附源码
Dec 07 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
一文搞懂python异常处理、模块与包
Jun 26 Python
python爬虫模块URL管理器模块用法解析
Feb 03 #Python
Tensorflow实现多GPU并行方式
Feb 03 #Python
python如何通过twisted搭建socket服务
Feb 03 #Python
关于Tensorflow分布式并行策略
Feb 03 #Python
基于python修改srt字幕的时间轴
Feb 03 #Python
Python实现不规则图形填充的思路
Feb 02 #Python
Python ORM编程基础示例
Feb 02 #Python
You might like
php下批量挂马和批量清马代码
2011/02/27 PHP
php文档更新介绍
2011/07/22 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
parser.add_argument中的action使用
2020/04/20 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
教学改革实施方案
2014/03/31 职场文书
安全宣传标语
2014/06/10 职场文书
治庸问责心得体会
2014/09/12 职场文书
合同纠纷调解书
2015/05/20 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
mysql sock 文件解析及作用讲解
2022/07/15 MySQL