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实现多线程采集的2个代码例子
Jul 07 Python
django实现前后台交互实例
Aug 07 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python简单贪吃蛇开发
Jan 28 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
Django框架 信号调度原理解析
Sep 04 Python
python在不同条件下的输入与输出
Feb 13 Python
在python中求分布函数相关的包实例
Apr 15 Python
Python使用OpenPyXL处理Excel表格
Jul 02 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
php生成随机颜色的方法
2014/11/13 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
园林设计师自荐信
2013/11/18 职场文书
运动会通讯稿500字
2014/02/20 职场文书
英语专业求职信
2014/07/08 职场文书
联谊活动总结
2014/08/28 职场文书
营业员岗位职责
2015/02/11 职场文书
社区党员干部承诺书
2015/05/04 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
浅谈Node的内存泄露问题
2022/05/06 NodeJs
mysql函数之截取字符串的实现
2022/08/14 MySQL