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程序与系统shell交互的方式
Apr 09 Python
python 对key为时间的dict排序方法
Oct 17 Python
python实现数据分析与建模
Jul 11 Python
flask应用部署到服务器的方法
Jul 12 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
pycharm快捷键汇总
Feb 14 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
Python如何生成xml文件
Jun 04 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
Python生成随机MAC地址
2015/03/10 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
详解Python with/as使用说明
2018/12/13 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
大学毕业生求职自荐书
2014/06/05 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书