博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
除了画佩奇我们还要玩点更高级的
阅读量:6929 次
发布时间:2019-06-27

本文共 3830 字,大约阅读时间需要 12 分钟。

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

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

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

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

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

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

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

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

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

具体实现

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

1def Skip(step):2    turtle.penup()3    turtle.forward(step)4    turtle.pendown()复制代码

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

def mkHand(name, length):2    turtle.reset()3    Skip(-length * 0.1)4    turtle.begin_poly()5    turtle.forward(length * 1.1)6    turtle.end_poly()7    handForm = turtle.get_poly()8    turtle.register_shape(name, handForm)复制代码

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

def Init(): 2    global secHand, minHand, hurHand, printer 3    turtle.mode("logo") 4    mkHand("secHand", 135) 5    mkHand("minHand", 125) 6    mkHand("hurHand", 90) 7    secHand = turtle.Turtle() 8    secHand.shape("secHand") 9    minHand = turtle.Turtle()10    minHand.shape("minHand")11    hurHand = turtle.Turtle()12    hurHand.shape("hurHand")1314    for hand in secHand, minHand, hurHand:15        hand.shapesize(1, 1, 3)16        hand.speed(10)171819    printer = turtle.Turtle()20    printer.hideturtle()21    printer.penup()复制代码

现在需要定义时间格式

def Week(t): 2    week = ["星期一", "星期二", "星期三", 3            "星期四", "星期五", "星期六", "星期日"] 4    return week[t.weekday()] 5 6 7def Date(t): 8    y = t.year 9    m = t.month10    d = t.day11    return "%s %d%d" % (y, m, d)复制代码

绘制指针的动态显示

def Tick(): 2 3    t = datetime.today() 4    second = t.second + t.microsecond * 0.000001 5    minute = t.minute + second / 60.0 6    hour = t.hour + minute / 60.0 7    secHand.setheading(6 * second) 8    minHand.setheading(6 * minute) 9    hurHand.setheading(30 * hour)1011    turtle.tracer(False)12    printer.forward(65)13    printer.write(Week(t), align="center",14                  font=("Courier", 14, "bold"))15    printer.back(130)16    printer.write(Date(t), align="center",17                  font=("Courier", 14, "bold"))18    printer.home()19    turtle.tracer(True)2021    # 100ms后继续调用tick22    turtle.ontimer(Tick, 100)复制代码

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

def SetupClock(radius): 2    turtle.reset() 3    turtle.pensize(7) 4    for i in range(60): 5        Skip(radius) 6        if i % 5 == 0: 7            turtle.forward(20) 8            Skip(-radius - 20) 910            Skip(radius + 20)11            if i == 0:12                turtle.write(int(12), align="center", font=("Courier", 14, "bold"))13            elif i == 30:14                Skip(25)15                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))16                Skip(-25)17            elif (i == 25 or i == 35):18                Skip(20)19                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))20                Skip(-20)21            else:22                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))23            Skip(-radius - 20)24        else:25            turtle.dot(5)26            Skip(-radius)27        turtle.right(6)复制代码

写在最后

学习就是举一反三,希望你可以用turtle画出更有意思的东西来。 钟表的完整代码需要关注公众号【Ahab杂货铺】后台回复【钟表】获取 【推荐阅读】

转载于:https://juejin.im/post/5c47fcb2f265da613b7014ed

你可能感兴趣的文章
GNU ARM 汇编指令[转载]
查看>>
WEBFORM CHARTS不显示图表
查看>>
操作符
查看>>
4.LVS的三种工作模式_DR模式
查看>>
9.0.网络编程_IO 通信模型
查看>>
转载整理:显式游标和隐式游标和动态游标
查看>>
web前端开发总结
查看>>
MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决
查看>>
Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写
查看>>
微信跳一跳Python辅助无需配置一键操作
查看>>
提示输入 用户名 ,密码,--》转
查看>>
Ubuntu Broadcom无线网卡驱动安装
查看>>
T[]与List<T>的使用时机
查看>>
wap 媒体查询对应iphone手机的大小范围
查看>>
在Windows Server 2008上配置Memcached
查看>>
LINQ to SQL with NOLOCK
查看>>
Sencha-命令-CMD(Ant集成)(官网文档翻译34)
查看>>
vim快捷键
查看>>
【HDOJ】5155 Harry And Magic Box
查看>>
第4次冲刺练习
查看>>