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中的列表推导浅析
Apr 26 Python
使用Python编写Linux系统守护进程实例
Feb 03 Python
Python时间戳使用和相互转换详解
Dec 11 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
深入浅析Python中的迭代器
Jun 04 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python批量处理txt文件的实例代码
Jan 13 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Python中Selenium库使用教程详解
Jul 23 Python
python获取百度热榜链接的实例方法
Aug 25 Python
用python开发一款操作MySQL的小工具
May 12 Python
Python源码解析之List
May 21 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 表单验证实现代码
2009/03/10 PHP
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
PHP实现微信对账单处理
2018/10/01 PHP
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
python fabric使用笔记
2015/05/09 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
ASP.NET Core中的配置详解
2021/02/05 Python
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
如何写好升职自荐信
2014/01/06 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
四年级学生评语大全
2014/04/21 职场文书
会计学专业自荐信
2014/06/25 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
医生个人年度总结
2015/02/28 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫