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实现在目录中查找指定文件的方法
Nov 11 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python中利用xpath解析HTML的方法
May 14 Python
python3安装speech语音模块的方法
Dec 24 Python
解决Python中回文数和质数的问题
Nov 24 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 Python
Python3基于print打印带颜色字符串
Jul 06 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Python实现Excel自动分组合并单元格
Feb 22 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
python编程实现希尔排序
2017/04/13 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
大学生学生会工作总结2015
2015/05/26 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python