首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python的绘图利器:海龟绘图turtle

我们之前提到Python是一种超级语言,因为其提供了极其丰富的库,需要什么拿来黏合一下就可以直接使用。就像现在的有些汽车工厂一样,根本不用重新发明生产什么,只需要买来相应部件等把它们组装起来就好。

作为你学习python的第一个程序,树哥决定直接来一个实战干货程序:利用海龟turtle来画一个奥运五环。这样就既可以理解库的概念和使用,又可以理解程序的基本概念。

闲话少叙,直接上程序:

C2CD5756-27DB-4658-AE38-3228803B2C10.png

总共26行代码,树哥建议你把每行代码敲进去执行一下,你会发现执行的效果如下图:

4E7FA906-A667-49FB-AB24-18680ACA9EC4.png

这26行代码说多不多,不过对于没有看过代码的人来讲,可能会有点压力。

不过可以想到的是,这5个环画法都一样,再看到那么多长得很像的代码,就知道重复的代码很多,也难不在哪里。

我们把这段代码先分成几个部分,如下图:

B9A7490F-3A8C-4B64-B15E-3CCB5819C743.png

从这张图中可以看出来,程序就分为两个主体部分:

公共部分

画图部分

当然,你可能会说,结尾不是还有一句:P.done()吗?

这个语句是个固定格式,有这句话画完图,绘图窗口还保留,如果没有这句话,绘图窗口就直接关闭了,所以初期都加上就好了。

下面,我们就进入正题:

公共设置

公共设置的第一条

import turtle

import是导入,turtle是海龟绘图库,所以这句话就是导入海龟会图库的意思,记住就可以了。

turtle是一个专门用于绘图的库,需要画图的时候我们直接import一下就好,在此需要说明的有两点:

其他库也一样,直接import一下就好,例如:pyquery 网页解析库, pymysql 存储库等等。

安装python的时候自带的turtle库被称作标准库,需要另外安装的库称作第三方库。也就是说,第三方库必须先安装,再import。

第二条:p = turtle

这条语句相当于把给turtle起了个比较短的名字叫做p,如果没有这条语句的话,那么下面的语句就变成:

turtle.pensize(3)

这条语句其实没有什么实际意义,就是可以让下面的语句简单一些而已。有点像我们平常所说的:深圳华为科技有限公司,以下简称:华为,一个道理。

第三句:p.pensize(3)

就是turtle.pensize(3)的缩写形式,意思是画笔的粗细为3个像素。pensize就是两个单词组合:pen(画笔)+size(大小)。

画图部分

画图部分语句基本都是重复的,我们把重复的几个语句拿出来分析一下就很了然了。

DB4F17A8-2D38-413A-9EC1-38EF93D6ABB6.png

第一句:p.pu()

其实只要知道pu是由两个单词:pen(画笔)+up(拿起)组成就知道这句话的意思了:把画笔抬起来,之后画笔的移动不会在纸面上留下痕迹。

p.goto(60,0)

goto的意思是去的意思,也就是说把画笔拿到画布的坐标点(60,0)去。画布的中心为(0,0),所以当前的位置就是顺着x轴移动60像素。

因为上个语句把画笔抬起来了,所以从当前位置移动到(60,0)不会再画布上留下痕迹。

p.pd()

pd与pu对应,是pen(画笔)+down(放下)的缩写,也就是把画笔落下了,之后画笔移动就会在画布上留下痕迹。

p.color(“black”)

这句话太好理解了,就是把画笔的颜色改成黑色,几个圆圈的颜色不同,就是要在画圆圈之前把画笔的颜色变了。需要知道的是,颜色除了写英文之外,还可以使用RGB(255.255.255)和小数标识。不过,这个也不需要记忆,需要的时候查询就好。

p.circle(30,360)

最最重要的画圆终于出现了,circle就是画个圆,直径是30像素,画360度,也就是一个整个圆。当然也可以画成180度半个圆弧,或者90度、30度甚至15度的圆弧。

轻轻易易地把一段程序解读完成了,这个绘图其实很简单,就两个步骤:

设置公共变量

绘图

当然,这个库还有一些内容,我们稍作补充:

其他参数

turtle.setup设置绘图窗口大小和位置。

turtle.colormode 颜色模式RGB还是英文

turtle.speed 画笔速度

turtle.fd向前走直线,fd=forward

turtle.bk 向后走直线 bk=back

turtle.left 向左转

turtle.right 向右转

turtle.seth 转向角度

很简单吧?

本质上,库的含义是,库是已经编写好的程序模块,然后给我们提供基本的功能,我们通过这些基本功能“咒语”来驱动这些基本功能来实现我们的目的。

虽然这个库的内容也没有很多,不过确实也没有必要记忆或者学习什么,需要的时候只要搜一下这个库提供哪些功能接口就好了。

总结:python的强大不在于程序本身,而在于其有强大的生态,也就是有无数的库可以被我们使用,我们可以把他们当成模组直接拿来使用。已经集成到python中的库被称作标准库,没有集成进去的叫做第三方库,安装一下就好。最后,附一个绘制小猪佩奇的小代码,如果你有兴趣也可以复制尝试执行一下,需要其他案例,可以私信索要。

import turtle

画鼻子

def drawNose():

turtle.penup()

turtle.seth(90)

turtle.fd(100)

turtle.pendown()

turtle.begin_fill()

turtle.fillcolor('black')

turtle.seth(45)

turtle.fd(25)

turtle.seth(135)

turtle.circle(25, 95)

turtle.seth(315)

turtle.fd(25)

turtle.end_fill()

画眼睛

def drawEyes(seth, fd, r):

turtle.penup()

turtle.seth(seth)

turtle.fd(fd)

turtle.pendown()

turtle.begin_fill()

turtle.fillcolor('black')

turtle.circle(50)

turtle.end_fill()

turtle.penup()

turtle.circle(50, r)

turtle.pendown()

turtle.begin_fill()

turtle.fillcolor('white')

turtle.circle(20)

turtle.end_fill()

画脸

def drawFace(seth, fd):

turtle.penup()

turtle.seth(seth)

turtle.fd(fd)

turtle.pendown()

turtle.begin_fill()

turtle.fillcolor('red')

turtle.circle(70)

turtle.end_fill()

画嘴巴

def drawLip():

turtle.penup()

turtle.seth(135)

turtle.fd(250)

turtle.pendown()

turtle.seth(-300)

turtle.circle(30, -65)

turtle.begin_fill()

turtle.fillcolor('Firebrick')

turtle.seth(165)

turtle.fd(140)

turtle.seth(195)

turtle.fd(140)

turtle.seth(-360)

turtle.circle(30, -65)

turtle.penup()

turtle.seth(-60)

turtle.circle(30, 65)

turtle.pendown()

turtle.seth(-70)

turtle.fd(240)

turtle.circle(55, 140)

turtle.seth(70)

turtle.fd(240)

turtle.end_fill()

turtle.seth(-110)

turtle.fd(80)

turtle.begin_fill()

turtle.fillcolor('Firebrick')

turtle.seth(120)

turtle.circle(120, 123)

turtle.seth(-70)

turtle.fd(165)

turtle.circle(55, 140)

turtle.seth(72)

turtle.fd(165)

turtle.end_fill()

主函数

def main():

turtle.pensize(4)

turtle.hideturtle()

turtle.setup(1000, 600)

turtle.speed(10)

turtle.screensize(bg='yellow')

drawNose()

drawEyes(160, 250, 60)

drawEyes(-9.5, 530, 230)

drawFace(195, 600)

drawFace(-11, 720)

drawLip()

turtle.done()

if name == 'main':

main()

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190531A07GZR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券