相信有不少人学习python 都是听了老前辈的推荐

“学python好,python有趣的代码多”

比如说画一只小狮子

这就是今天想要介绍的绘制图形库-turtle

如果也想这样画一只小狮子,或者其他的小动物那就赶紧点赞收藏学起来吧

一、什么是turtle库

turtle库是python的基础绘图库

这个库被介绍为一个最常用的用来给孩子们介绍编程知识的方法库,

其主要是用于程序设计入门,是标准库之一,利用turtle可以制作很多复杂的绘图。

简单理解turtle库就是一个用于图形绘制的基础库。

可能刚刚就有人有疑问,为什么绘画库不叫painting,而叫turtle?这就不得不说turtle库的思想。

在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。

二、有哪些函数?

1.画布

既然说turtle是一个绘图库,那么怎么能不说画布呢?

画布函数有两个

第一个为screensize()其中包含三个参数,它们分别为

canvwidth=None,画布的长度

canvheight=None,画布的宽度

bg=None,画布的背景色

画布是必不可少的,为防止有些粗心鬼忘设定,所以默认无设定时为一个400*300的白画布

第二个为setup(),有四个参数

width、height两者表示为画布的长与宽,当传参为整数时,表示像素长度单位,当传参为小数时,表示与屏幕的比例

starX,starY则表示一组坐标值,坐标表示画布左上角的位置,若为空则默认为屏幕中心

两个函数各有优劣,screensize()可以设定背景色,setup可以设定位置,如下图所比较

  1. import turtle
  2. turtle.screensize(400,300,"green")
  3. turtle.done()

  1. import turtle
  2. turtle.setup(600,400,100,100)
  3. turtle.done();

2.画笔

turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

所以画笔一共有三个基础属性函数,分别为

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

turtle.pencolor(); 设置画笔的颜色,颜色采用RGB,也可以直接输入对应颜色如“red”,若无参数时,采用当前颜色,

turtle.speed(); 设置画笔的速度,从1`10,数字越大则速度越快。

代码如下设定

  1. import turtle
  2. turtle.pensize(5)
  3. turtle.pencolor("green")
  4. turtle.forward(100)
  5. turtle.done();

3.操作

操作可就相对来说多了一些,这里也只简单罗列几种常用的

(1)画笔运动命令

pendown()与penup()这两个函数可是哥俩,一目了然的意思,一个负责抬起画笔,一个负责落下画笔

表示画笔状态的转换,自然也就不需要传参数进入了

forword()函数用来控制画笔向正方向移动(正方向默认为东)

有向正方向,自然就有负方向函数backward()

还有就是goto函数,就像直译,表示将画笔移动到坐标轴的某处,goto传参数为坐标信息

就像刚刚介绍的那样,turtle使用的为极坐标方式,参数为方向与长度

所以left与right表示为顺时针与逆时针,传入参数为角度

(2)画笔控制命令

画笔控制命令相对来说比较少,主要操作便是填充

turtle.fillcolor(colorstring)  绘制图形的填充颜色

turtle.begin_fill()准备开始填充图形

turtle.end_fill()  填充完成

(3)    全局控制命令

turtle.clear() 清除窗口绘制图形

turtle.undo() 撤销上一个turtle动作

还有更多指令没有那么常见,便将它放在文章末尾,还往各位看客收藏之后记得帮我点个赞

接下来我们开始实战练习_画小狮子

从效果图中,我们可以看出,首先绘制的为小狮子的头发

那么我们先定义头发函数 def hair()

很明显画笔的起始位置不在画布中央,在(-50,150)处

这时候我们应当怎么办?自然是移动过去画笔

怎么移动画笔?这里两种方式都可以

第一种 偏转角度,在先前移动

turtle.left()+turtle.forward()

但是这种方法需要知道角度和长短,相对来说不是很好算 tan α = -3,l^2=(-50)^2+(150)^2

第二种  直接到达目的地

就是通过goto函数直接到达(-50,150)比较简单直接

需要注意的是,画笔直接过去会留下“画笔的印记”

所以应该先 抬起画笔,移动过去,再落下画笔

如图所示,小狮子的头发为10个同等的弧组成,这就需要用到for循环语句与circle()函数 setheading();

circle()函数为画圆而准备,需要传入半径,若为圆弧则还需要加入角度参数,当参数为正时从画笔左侧半径处开始顺时针画,当参数为负时从右侧开始逆时针画

需要注意的是要想让多个半圆围成,需要不断修改正方向,十个圆弧,所以每次需要偏转360/10,设计代码如下所示

  1. def hair():
  2. t.penup()
  3. t.goto(-50, 150)
  4. t.pendown()
  5. t.fillcolor('#a2774d')
  6. t.begin_fill()
  7. for j in range(10):
  8. t.setheading(60 - (j * 36))
  9. t.circle(-50, 120)
  10. t.end_fill()

有了画头发的经验,画脸相对来说好理解了不少

脸部有哪些,眼睛,鼻子,嘴巴,耳朵,下巴。

其中眼睛,耳朵为相互对称的部分,所以可以单独拿出来,组成函数,到时候传参数只要分别传1与-1两个相反数即可保证画的对称和谐。

按照效果图的顺序开始,画完头发后该画耳朵,之后开始重复工作,抬起画笔,移动到指定位置,设计如何绘画,记得填充状态和画笔的起落状态。

最后送上代码如下,和turtle工具图。希望各位大佬喜欢,加个关注。

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

启动事件循环 -调用Tkinter的mainloop函数。

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

turtle.mode(mode=None)

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

模式

初始龟标题

正角度

standard

向右(东)

逆时针

logo

向上(北)

顺时针

turtle.delay(delay=None)

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

turtle.begin_poly()

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

turtle.end_poly()

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

turtle.get_poly()

返回最后记录的多边形。

小狮子代码如下

  1. import turtle as t
  2.  
  3. def hair():
  4. t.penup()
  5. t.goto(-50, 150)
  6. t.pendown()
  7. t.fillcolor('#a2774d')
  8. t.begin_fill()
  9. for j in range(10):
  10. t.setheading(60 - (j * 36))
  11. t.circle(-50, 120)
  12. t.end_fill()
  13.  
  14. def face():
  15. t.penup()
  16. t.goto(0, 100)
  17. t.pendown()
  18. t.fillcolor('#f2ae20')
  19. t.begin_fill()
  20. t.setheading(180)
  21. t.circle(85)
  22. t.end_fill()
  23. #下巴
  24. t.circle(85, 120)
  25. t.fillcolor('white')
  26. t.begin_fill()
  27. t.circle(85, 120)
  28. t.setheading(135)
  29. t.circle(100, 95)
  30. t.end_fill()
  31.  
  32. def ears(dir):
  33. t.penup()
  34. t.goto((0-dir)*30, 90)
  35. t.setheading(90)
  36. t.pendown()
  37. t.fillcolor('#f2ae20')
  38. t.begin_fill()
  39. t.circle(dir*30)
  40. t.end_fill()
  41.  
  42. t.penup()
  43. t.goto((0-dir)*40, 85)
  44. t.setheading(90)
  45. t.pendown()
  46. t.fillcolor('white')
  47. t.begin_fill()
  48. t.circle(dir*17)
  49. t.end_fill()
  50.  
  51. def nose():
  52. t.penup()
  53. t.goto(20, 0)
  54. t.setheading(90)
  55. t.pendown()
  56. t.fillcolor('#a2774d')
  57. t.begin_fill()
  58. t.circle(20)
  59. t.end_fill()
  60.  
  61. def eye(dir):
  62. t.penup()
  63. t.goto((0-dir)*30, 20)
  64. t.setheading(0)
  65. t.pendown()
  66. t.fillcolor('black')
  67. t.begin_fill()
  68. t.circle(10)
  69. t.end_fill()
  70.  
  71. def mouth():
  72. t.penup()
  73. t.goto(0, 0)
  74. t.setheading(-90)
  75. t.pendown()
  76. t.forward(50)
  77. t.setheading(0)
  78. t.circle(80, 30)
  79. t.penup()
  80. t.goto(0, -50)
  81. t.setheading(180)
  82. t.pendown()
  83. t.circle(-80, 30)
  84.  
  85. hair()
  86. ears(1)
  87. ears(-1)
  88. face()
  89. eye(1)
  90. eye(-1)
  91. mouth()
  92. nose()
  93. t.done()

本篇博客重点在介绍各个函数,若小狮子绘制仍然有问题,可以留言,有需要可以做一期专门的博客。

谢谢观看

python库之turtle(图形绘制) 开启新的快乐源泉的更多相关文章

  1. Python之网络模型与图形绘制工具networkx

    笔记 # https://www.jianshu.com/p/e543dc63454f import networkx as nx import matplotlib.pyplot as plt ## ...

  2. 你想不到的沙雕,10行代码Python实现GIF图倒放,每天的快乐源泉

    前言 GIF图现在已经融入了我们的日常网络生活,微信群.QQ群.朋友圈......一言不合就斗图,你怕了吗?不用担心,只要学会了Python之GIF倒放技能,你就是“斗图王”. 咱们直接开始本文的内容 ...

  3. 吴裕雄--天生自然python编程:turtle模块绘图(3)

    turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制.turtle图形绘制的概念诞生于1969年,成功应用于LOGO编程语言. turtle库绘制图形有一个基本框架:一个小海龟 ...

  4. python学习笔记(3)--turtle简单绘制

    参考:大学生mooc 北京理工大学的python程序与设计课程 蟒蛇绘制代码如下: #pythonDraw.py import turtle turtle.setup(650,350,200,200) ...

  5. Python-基本图形绘制及库引用

    turtle库的使用 概述:turtle(海龟)库是turtle绘图体系的python实现 turtle库的理解: -有一只海龟,其实在窗体正中心,在画布上游走 -走过的轨迹形成了绘制的图形 -海龟由 ...

  6. Python绘图工具turtle库的使用

    #PythonDraw.py import turtle #引入了一个绘图库(海归库) turtle.setup(650,350,200,200) #设置一个窗体 turtle.penup() #将画 ...

  7. 014 Python基本图形绘制小结

    目录 一.Python基本语法元素 1.1 温度转换 二.Python基本图形绘制 2.1 Python蟒蛇绘制 一.Python基本语法元素 缩进.注释.命名.变量.保留字 数据类型.字符串. 整数 ...

  8. 推荐12个最好的 JavaScript 图形绘制库

    众多周知,图形和图表要比文本更具表现力和说服力.图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web  ...

  9. 使用原生JavaScript的Canvas实现拖拽式图形绘制,支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形,不依赖任何库和插件,有演示demo

    前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包 ...

随机推荐

  1. Liunx软件安装之Tomcat

    一.Tomcat 安装 1.1 yum 安装 1) 安装 tomcat 基础服务 sudo yum -y install tomcat 2) 安装管理界面 sudo yum -y install to ...

  2. Liunx学习总结(六)--进程

    进程概述 简单来讲程序是一个包含可以执行代码的静态的文件.进程是一个开始执行但是还没有结束的程序的实例.当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作 ...

  3. ionic3.x脚手架(基于个人项目自用)

    ionic3项目开发脚手架(基于个人练习项目) 一.    基于ionic3的生产环境搭建 1.    配置安卓SDK: 安装jdk  --->  安装AndroidSDK (1)      安 ...

  4. 使用coding和hexo快速搭建博客

    欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz 今天教大家怎么用hexo快速搭建自己的博客.我不是专业人士,不懂前端知识,所以我十分讨厌那些专业术语,讲了一大堆,对于技术小白 ...

  5. 拖动水滴给土地浇水(CocosCreator)

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 一.前沿       最近在做农场的模块,需要实现拖动水滴图标(

  6. Codeforces 985E

    题意略. 思路: 这个题目开始想的有点暴力,后来发现有搜索的性质,因此转而用动态规划.首先,我们要把这些数排个序. 定义状态:dp[i]为排序后i~n能否成功打包,1表示可以,0表示不能打包. 状态转 ...

  7. Eureka(一)术语详解(用具体的事物理解抽象的概念)

    最近工作较闲,所以自己研究了下eureka的原理,实现,和集群搭建等.(注:我没实操过eureka集群项目,都是自己做的demo产生的结论,如果有错误欢迎指出) 首先说一下我对eureka的一些术语的 ...

  8. 同步vmware虚拟机和主机的时间

    1. 打开虚拟机->设置 2. 选择选项标签页,选中VMware Tools,勾选“将客户机时间与主机同步”

  9. CodeForces 821D Okabe and City

    Okabe and City 题解: 将行和列也视为一个点. 然后从普通的点走到行/列的点的话,就代表这行/列已经被点亮了. 然后将费用为0的点建上边. 注意讨论(n,m)非亮的情况下. 代码: #i ...

  10. 【Offer】[3-1] 【找出数组中重复的数字】

    题目描述 思路 Java代码 代码链接 题目描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组中任 ...