python小程序-第一个python小程序——即时动态时钟(代码解读)
代码资源来自:
一、完整代码:
#coding=UTF-8
from turtle import *
from datetime import *
def Skip(step): #建立表的外框
penup()
forward(step)
pendown()def mkHand(name,length): #注册turtle形状,建立表针turtle
reset()
Skip(-length*0.1)
begin_poly()
forward(length*1.1)
end_poly()
handForm=get_poly()
register_shape(name,handForm)defInit():globalsecHand,minHand,hurHand,printer
mode("logo") #重置turtle指向北
mkHand("secHand",125) #建立三个表针并初始化
mkHand("minHand",130)
mkHand("hurHand",90)
secHand=Turtle()
secHand.shape("secHand")
minHand=Turtle()
minHand.shape("minHand")
hurHand=Turtle()
hurHand.shape("hurHand")for hand insecHand,minHand,hurHand:
hand.shapesize(1,1,3)
hand.speed(0)
printer= Turtle() #建立输出文字turtle
printer.hideturtle()
printer.penup()def SetupClock(radius): #建立表外框
reset()
pensize(7)for i in range(60):
Skip(radius)if i % 5 ==0:
forward(20)
Skip(-radius-20)else:
dot(5)
Skip(-radius)
right(6)defWeek(t):
week= ["Mon", "Tues", "Wed","Thur", "Fri", "Sat", "Sun"]returnweek[t.weekday()]defDate(t):
y=t.year
m=t.month
d=t.dayreturn "%s %d %d" %(y, m, d)defTick():
t=datetime.today()
second= t.second + t.microsecond * 0.000001minute= t.minute + second/60.0hour= t.hour + minute/60.0secHand.setheading(6*second)
minHand.setheading(6*minute)
hurHand.setheading(30*hour)
tracer(False)
printer.forward(65)
printer.write(Week(t),align="center",font=("Courier",14,"bold"))
printer.back(130)
printer.write(Date(t),align="center",font=("Courier",14,"bold"))
printer.home()
tracer(True)
ontimer(Tick,100) #100ms后继续调用tick
defmain():
tracer(False)
Init()
SetupClock(160)
tracer(True)
Tick()
mainloop()if __name__ == "__main__":
main()
二、运行结果截图
三、程序解读
1、思路
需求:5个Turtle对象, 1个绘制外表盘+1个输出文字++3个模拟表上针
Step1:建立5个Turtle对象并初始化 (表盘绘制和文本输出对象是turtle常见的对象方式;turtle的外观shape就是指针形状,在每一时刻以轴心为圆心旋转了一定角度)
Step2:静态表盘绘制
Step3:根据时钟更新表针位置与时间信息
基本库:Turtle、datetime
2、代码
(1)fromturtle import *
Turtle库——Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟(画笔),在一个横轴为x、纵轴为y的坐标系(画布),根据一组函数指令的控制,在平面坐标系中移动,从而在它爬行的路径上绘制了图形。
操纵海龟绘图有3种命令:
运动命令
画笔控制命令
全局控制命令
还有其他命令
(2)from datetime import *
datetime模块重新封装了time模块,提供了更多处理日期和时间的接口。包含以下几个类和两个常量:
每个类中定义了很多属性和方法,包括对时间的调用及格式转换等问题在此不再赘述。
(3)几个重要的函数 (代码中的函数写成mode(),而不用写成turtle.mode(),是因为turtle是python的标准库,在python项目里不会提示“unresolved reference "xxx’”,但在解释器为python2.7的python文件中不会有提示。此提示不影响代码运行)
SetupClock(radius): 绘制表盘,表盘半径radius为参数
设置画笔大小,通过60次循环绘制刻度,每5个刻度为短线段,其余为小圆点。
Skip(step): 由于表盘刻度不连续,需频繁抬起画笔,放下画笔
mkHand(name,length): 定义指针几何形状。
使用两个函数begin_poly() 、end_poly()记录多边形形状,register_shape函数将handForm几何形状注册为合法的turtle外形.
Init(): 初始化表针和文本对象
Tick(): 绘制表针的动态显示
获取当前的时分秒,设置每个指针转动的角度,绘制星期与日期文本,每隔100ms调用此函数更新时间
tracer(False) : 实现绘制的效果同时出现,用tracer函数控制刷新,false时动画关闭,绘制结束后一致刷新;true时恢复动画的绘制效果
mainloop(): 启动事件循环 -调用Tkinter的mainloop函数。必须是乌龟图形程序中的最后一个语句。
the end.......
python小程序-第一个python小程序——即时动态时钟(代码解读)相关推荐
- 圣诞节快到了,用Python给好友做一个圣诞树小程序吧【保姆式教程】
圣诞节快到了,用Python给好友做一个圣诞树小程序吧[保姆式教程] 马上圣诞节了,一个人的圣诞节可能会有些孤独,我来教你怎么用代码写一棵超级治愈的圣诞树. 话不多说,下面来看具体怎么实现吧! 文章目 ...
- 第一个程序(python)-helloworld_创建第一个python程序:‘Hello World!’
安装好python解释器就可以创建第一个仪式程序Helloworld了 1.Python程序的3种运行方式 1.1.Python解释器直接运行 在Windows或者Linux命令行输入python,进 ...
- c语言字符串用for语句去重,python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...
也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...
- python编程在哪里写程序-第一个Python程序——在屏幕上输出文本
本节我将给大家介绍最简单.最常用的 Python 程序--在屏幕上输出一段文本,包括字符串和数字. Python 使用 print 函数在屏幕上输出一段文本,输出结束后会自动换行. 在屏幕上输出字符串 ...
- python程序-第一个Python程序——在屏幕上输出文本
本节我将给大家介绍最简单.最常用的 Python 程序--在屏幕上输出一段文本,包括字符串和数字. Python 使用 print 函数在屏幕上输出一段文本,输出结束后会自动换行. 在屏幕上输出字符串 ...
- 第一个python解释器_第一个python程序
回顾昨日重点(需记住5*) 三大核心: cpu--运行程序 内存--基于电,存取速度快,断电丢失数据 硬盘--基于磁,存取速度远远慢于内存,断电不丢失数据 操作系统 应用程序 操作系统 (window ...
- Python基础班---第一部分(基础)---Python基础知识---第一个Python程序
01. 第一个 HelloPython 程序 1.1 Python 源程序的基本概念 Python 源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 Python 的开发 Python 程 ...
- Python学习笔记-第一个Python程序
上代码前先上个东西: 直接输入 >>>'11111111' 与输入 >>>print('11111111') 有何不同? 没错,直接输入是将结果及类型打印到屏幕上, ...
- Python逐块执行另一个Python程序中的代码观察运行过程
今天是10月24日,也是一年一度的程序员节,祝所有热爱代码的朋友们节日快乐! 祝所有程序员1024节日快乐 全国高校教师Python课程高级研修班(线上,11月20-21日) 中国大学MOOC&quo ...
最新文章
- 开源库nothings/stb的介绍及使用(图像方面)
- copy模块中的copy与deepcopy的区别
- 小波阈值去噪原理及实现
- 使用CSS实现透明边框的效果——兼容当前各种主流浏览器[xyytIT]
- BZOJ 1034: [ZJOI2008]泡泡堂BNB
- html中div页面布局,前端入门篇(二):利用Div + CSS快速布局页面
- Office安装成功之后,.ppt的文档图标显示不正常,怎么解决?
- 二元二次方程例题_二元二次方程组-解法-例题
- Elasticsearch:InteliJ Elasticsearch plugin 集成
- GitHub设置代理 提升速度
- SAS PROC SQL
- 淘宝修改密码可能引发手机骚扰
- 东南大学提出条件自监督小样本学习方法,显著提升小样本分类准确率
- 中止执行后超过2年_执行中止后恢复执行的期限有什么规定
- V-token的技术革新,引领数字化支付热潮
- 如何构建一个在线绘图工具:Feakin 是如何设计与构建的?
- 编译原理——说明语句翻译
- 550w计算机电源,GTX 1080显卡配550W电源够用不?老司机来告诉你如何DIY电脑主机...
- 东软睿道出席2013年国家示范性软件学院院长联席会会议
- Godaddy SSL 证书配置(Nginx)
热门文章
- 为什么一些人喜欢在java代码中能加final的变量都加上final
- android从放弃到精通第11天 勿忘初心
- python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
- 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少....
- JavaScript 运行机制详解:Event Loop——续
- 事件冒泡和捕获的执行顺序
- cookie 的使用
- JQuery-- 获取元素的宽高、获取浏览器的宽高和垂直滚动距离
- 原生JS和jQuery操作DOM的区别小结
- C语言 · 求存款