python使用Turtle库绘制动态钟表


Posted in Python onNovember 19, 2018

Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。同时借助Google和百度。

本文介绍的turtle库对应的官方文档地址

绘制动态钟表的基本思路如下(面向对象的编程):

使用5个turtle对象

1个turtle:绘制外表盘

3个turtle:模拟表针行为

1个turtle:输出表盘上文字

根据实时时间使用ontimer()函数更新表盘画面,显示效果如下:

python使用Turtle库绘制动态钟表

相关函数的使用在程序中进行了详细的注释,代码如下:

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) 
 
def Init():
 global secHand, minHand, hurHand, printer
 mode("logo")# 重置Turtle指向北
 #建立三个表针Turtle并初始化
 mkHand("secHand", 135)
 mkHand("minHand", 110)
 mkHand("hurHand", 90)
 secHand = Turtle()
 secHand.shape("secHand")
 minHand = Turtle()
 minHand.shape("minHand")
 hurHand = Turtle()
 hurHand.shape("hurHand")
 for hand in secHand, minHand, hurHand:
  hand.shapesize(1, 1, 3)
  hand.speed(0)
 #建立输出文字Turtle
 printer = 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)
   
def Week(t): 
 week = ["星期一", "星期二", "星期三",
   "星期四", "星期五", "星期六", "星期日"]
 return week[t.weekday()]
 
def Date(t):
 y = t.year
 m = t.month
 d = t.day
 return "%s %d %d" % (y, m, d)
 
def Tick():
 #绘制表针的动态显示
 t = datetime.today()
 second = t.second + t.microsecond*0.000001
 minute = t.minute + second/60.0
 hour = t.hour + minute/60.0
 secHand.setheading(6*second) #设置朝向,每秒转动6度
 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.back(50)
 printer.write("i_chaoren", align="center",
     font=("Courier", 14, "bold"))
 printer.home()
 tracer(True)
 
 ontimer(Tick, 1000)#1000ms后继续调用tick
 
def main():
 tracer(False) #使多个绘制对象同时显示
 Init()
 SetupClock(160)
 tracer(True)
 Tick()
 mainloop()
 
if __name__ == "__main__":  
 main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python操作Elasticsearch数据索引的教程
Apr 08 Python
Python 操作MySQL详解及实例
Apr 30 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python pymongo模块常用操作分析
Sep 01 Python
python 异或加密字符串的实例
Oct 14 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
Python实现元素等待代码实例
Nov 11 Python
python logging.basicConfig不生效的原因及解决
Feb 20 Python
python Pexpect模块的使用
Dec 25 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
python+PyQT实现系统桌面时钟
Jun 16 #Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 #Python
Window环境下Scrapy开发环境搭建
Nov 18 #Python
Python中安装easy_install的方法
Nov 18 #Python
win7 x64系统中安装Scrapy的方法
Nov 18 #Python
python实现简易数码时钟
Feb 19 #Python
python爬取淘宝商品销量信息
Nov 16 #Python
You might like
PHP递归算法的详细示例分析
2013/02/19 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
php实现webservice实例
2014/11/06 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
jQuery事件用法详解
2016/10/06 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
详解vuex的简单使用
2018/03/12 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python异常处理操作实例详解
2018/05/10 Python
python实现kmp算法的实例代码
2019/04/03 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
C语言编程练习
2012/04/02 面试题
如何手工释放资源
2013/12/15 面试题
个性婚礼策划方案
2014/05/17 职场文书
岗位安全生产责任书
2014/07/28 职场文书
房屋过户委托书范本
2014/10/07 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫