欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:Ahab,专注与 Python 数据挖掘、数据分析与机器学习

公众号:Ahab杂货铺

推荐阅读:推荐几个Python与AI方向的公众号

“你告诉爷爷你需要什么东西呀,爷爷给你准备,佩奇,什么是佩奇呀?”...

这是一个发生在大山里的故事,但故事的情节所有人都不会陌生。快过年了,在农村爷爷给城里的孙子打电话,孙子说想要“佩奇”,为了满足孩子的心愿,爷爷开始满村子找佩奇…

当除夕夜家人团聚,爷爷开始展示爱心礼物,“硬核佩奇”的出现,惊呆众人高能反转,别出心裁的爱跨越了隔代距离,成功博得孙子欢心。

啥是佩奇?已不重要。佩奇是他用搜集的所有信息,一点一滴的用心创造、编织爱的过程。佩奇是对孙子的关爱、佩奇是对团圆的企盼。

看着爷爷满村子找佩奇,鼻子有点酸,作为程序猿我想用Python来告诉爷爷,啥是佩奇?用python做一个社会人,这是很久之前的一篇文章,Turtle是自己接触python之后用到的第一个库,Trutle这个库很有意思,很容易得到满足感,学习完以后自己随手画了一个佩奇,佩奇当时没火没想到今天火了。今天的文章再次给大家介绍一下Turtle,用它来画高级一点的东西,话不多说我们开始吧。

程序介绍

在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方法是使用Python内嵌的Turtle模块。Turtle是Python内嵌的绘制线、圆以及其他形状(包括文本)的图形模块。它很容易学习并且使用简单。

一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对象,然后,可以调用Turtle对象的各种方法完成不同的操作。

当创建一个Turtle对象时,它的位置被设定在(0,0)处——窗口的中心,而且它的方向被设置为向右。Turtle模块用笔来绘制图形。默认情况下,笔是向下的(就像真实的笔尖触碰着一张纸)。如果笔是向下的,那么当移动Turtle的时候,它就会绘制出一条从当前位置到新位置的线。

今天我们要画的是一个可以获取当前时间的钟表

除了画佩奇我们还要玩点更高级的

具体实现

因为钟表轮廓中是有几个小黑点的,那么我们首先需要设置画笔的动作,抬起画笔向前一段距离以后再放下

1defSkip(step):

2turtle.penup()

3turtle.forward(step)

4turtle.pendown()

注册Turtle的形状,建立一个表针Turtle,同时记录多边形起点和终点。(当前的乌龟位置是多边形的第一个顶点,多边形的最后一个顶点将与第一个顶点相连)返回最后记录的多边形。

1defmkHand(name, length):

2turtle.reset()

3Skip(-length *0.1)

4turtle.begin_poly()

5turtle.forward(length *1.1)

6turtle.end_poly()

7handForm = turtle.get_poly()

8turtle.register_shape(name, handForm)

因为钟表有三个指针,现在需要建立三个表针Turtle并初始化,同时还需要建立一个输出文字的Turtle

1defInit():

2globalsecHand, minHand, hurHand, printer

3turtle.mode("logo")

4mkHand("secHand",135)

5mkHand("minHand",125)

6mkHand("hurHand",90)

7secHand = turtle.Turtle()

8secHand.shape("secHand")

9minHand = turtle.Turtle()

10minHand.shape("minHand")

11hurHand = turtle.Turtle()

12hurHand.shape("hurHand")

13

14forhandinsecHand, minHand, hurHand:

15hand.shapesize(1,1,3)

16hand.speed(10)

17

18

19printer = turtle.Turtle()

20printer.hideturtle()

21printer.penup()

现在需要定义时间格式

1defWeek(t):

2week = ["星期一","星期二","星期三",

3"星期四","星期五","星期六","星期日"]

4returnweek[t.weekday()]

5

6

7defDate(t):

8y = t.year

9m = t.month

10d = t.day

11return"%s %d%d"% (y, m, d)

绘制指针的动态显示

1defTick():

2

3t = datetime.today()

4second = t.second + t.microsecond *0.000001

5minute = t.minute + second /60.0

6hour = t.hour + minute /60.0

7secHand.setheading(6* second)

8minHand.setheading(6* minute)

9hurHand.setheading(30* hour)

10

11turtle.tracer(False)

12printer.forward(65)

13printer.write(Week(t), align="center",

14font=("Courier",14,"bold"))

15printer.back(130)

16printer.write(Date(t), align="center",

17font=("Courier",14,"bold"))

18printer.home()

19turtle.tracer(True)

20

21# 100ms后继续调用tick

22turtle.ontimer(Tick,100)

现在是重头戏了,绘制钟表的轮廓,这的主要逻辑就是一个循环,不难于理解。

1defSetupClock(radius):

2turtle.reset()

3turtle.pensize(7)

4foriinrange(60):

5Skip(radius)

6ifi %5==0:

7turtle.forward(20)

8Skip(-radius -20)

9

10Skip(radius +20)

11ifi ==0:

12turtle.write(int(12), align="center", font=("Courier",14,"bold"))

13elifi ==30:

14Skip(25)

15turtle.write(int(i /5), align="center", font=("Courier",14,"bold"))

16Skip(-25)

17elif(i ==25ori ==35):

18Skip(20)

19turtle.write(int(i /5), align="center", font=("Courier",14,"bold"))

20Skip(-20)

21else:

22turtle.write(int(i /5), align="center", font=("Courier",14,"bold"))

23Skip(-radius -20)

24else:

25turtle.dot(5)

26Skip(-radius)

27turtle.right(6)

写在最后

学习就是举一反三,希望你可以用turtle画出更有意思的东西来。

钟表的完整代码需要后台回复【钟表】获取

Python的爱好者社区历史文章大合集

2018年Python爱好者社区历史文章合集(作者篇)

福利:文末扫码关注公众号,“Python爱好者社区”,开始学习Python课程:

除了画佩奇我们还要玩点更高级的

关注后在公众号内回复“ 课程 ”即可获取:

小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

小编的Python的入门免费视频课程

小编的Python的快速上手matplotlib可视化库!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告扩展制作免费学习视频。

玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。

除了画佩奇我们还要玩点更高级的

相关文章: