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实现udp数据报传输的方法
Sep 26 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
python中获得当前目录和上级目录的实现方法
Oct 12 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
小结Python的反射机制
Sep 28 Python
python3代码中实现加法重载的实例
Dec 03 Python
pandas实现导出数据的四种方式
Dec 13 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下MAIL的另一解决方案
2006/10/09 PHP
PHP循环获取GET和POST值的代码
2008/04/09 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
javascript整除实现代码
2010/11/23 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python实现登录接口的示例代码
2017/07/21 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
迟到检讨书400字
2014/01/13 职场文书
公司活动总结怎么写
2014/06/25 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers