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 GAE、Django导出Excel的方法
Nov 24 Python
python 随机数生成的代码的详细分析
May 15 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
详解python基础之while循环及if判断
Aug 24 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
python获取中文字符串长度的方法
Nov 14 Python
Django处理多用户类型的方法介绍
May 18 Python
python 字符串追加实例
Jul 20 Python
对python中assert、isinstance的用法详解
Nov 27 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 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中的字符编码转换函数用法示例
2014/10/20 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python变量和数据类型详解
2017/02/15 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
Python函数中的可变长参数详解
2019/09/12 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
家佳咖啡店创业计划书
2013/12/27 职场文书
岗位聘任书范文
2014/03/29 职场文书
农村门前三包责任书
2014/07/25 职场文书
学习三严三实心得体会
2014/10/13 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
党员倡议书
2015/01/19 职场文书
义卖募捐活动总结
2015/05/09 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python