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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
如何解决.cuda()加载用时很长的问题
May 24 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连接mssql的一些相关经验及注意事项
2013/02/05 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
PHP模板解析类实例
2015/07/09 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
python如何为创建大量实例节省内存
2018/03/20 Python
python绘制多个曲线的折线图
2020/03/23 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
Python如何计算语句执行时间
2019/11/22 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
高一数学教学反思
2014/02/07 职场文书
《阳光》教学反思
2014/02/23 职场文书
2014年检验员工作总结
2014/11/19 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP