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实现无证书加密解密实例
Oct 27 Python
Python编码类型转换方法详解
Jul 01 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Python中单、双下划线的区别总结
Dec 01 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
Python使用xpath实现图片爬取
Sep 16 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
AI:如何训练机器学习的模型
Apr 16 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项目的方法
2006/10/09 PHP
建立文件交换功能的脚本(三)
2006/10/09 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
从0开始学Vue
2016/10/27 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
Python 文件重命名工具代码
2009/07/26 Python
利用python求相邻数的方法示例
2017/08/18 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
Django中modelform组件实例用法总结
2020/02/10 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
班组拓展活动方案
2014/08/14 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
创业计划书之物流运送
2019/09/17 职场文书