python使用turtle库绘制时钟


Posted in Python onMarch 25, 2020

Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。同时借助Google和百度。

本文介绍的turtle库对应的官方文档地址

绘制动态钟表的基本思路如下(面向对象的编程):

使用5个turtle对象
1个turtle:绘制外表盘
3个turtle:模拟表针行为
1个turtle:输出表盘上文字

根据实时时间使用ontimer()函数更新表盘画面,显示效果如下:

相关函数的使用在程序中进行了详细的注释,代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 12 10:43:55 2018

@author: Administrator
"""

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",125)
 mkhand("minhand",130)
 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+second/60.0
 sechand.setheading(6*second)
 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.home()
 tracer(True)
 ontimer(tick,100)#100ms后继续调用tick

def main():
 tracer(False)
 init()
 setupclock(160)
 tracer(True)
 tick()
 mainloop()
main()

运行结果

python使用turtle库绘制时钟

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python列表去重的二种方法
Feb 14 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
Python判断telnet通不通的实例
Jan 26 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
python 进程的几种创建方式详解
Aug 29 Python
Python range与enumerate函数区别解析
Feb 28 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 Python
Python日期时间对象转换为字符串的实例
Jun 22 #Python
python pandas 对时间序列文件处理的实例
Jun 22 #Python
python使用turtle绘制分形树
Jun 22 #Python
python递归函数绘制分形树的方法
Jun 22 #Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 #Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 #Python
python处理csv中的空值方法
Jun 22 #Python
You might like
Zend Framework+smarty用法实例详解
2016/03/19 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
详解python的四种内置数据结构
2019/03/19 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
高三毕业生自我鉴定
2013/12/20 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
电话客服工作职责
2014/07/27 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android