文 | 闲欢

来源:Python 技术「ID: pythonall」

时钟是我们日常生活中最常见的也是必不可少的东西,你有没有想过用 Python 来画一个实时动态的时钟呢?下面我们来看看如何使用简单的代码实现一个动态时钟吧!

海龟绘图介绍

Turtle 库是 Python 语言中一个很流行的绘制图像的函数库,虽然不知道为什么叫海龟这么奇怪的名字,但是可以根据这个名字联想到我们在操控一直海龟在 x 和 y 轴的二元坐标系上爬行,爬过的轨迹就是我们绘制的线条。从这个角度看,作者也是一个很有意思的人。

操纵海龟绘图有着许多的命令,这些命令可以划分为三种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

画笔运动命令

画笔运动命令

画笔控制命令

画笔控制命令

全局控制命令

全局控制命令

其他命令

其他命令

整体思路

了解了海龟绘图的命令后,我们下面来整理一下我们的绘图思路。

我们知道,一个时钟是由表盘和时针组成。

表盘是由刻度组成,一共有60个刻度,对应着一个圆的60个点,每隔4个刻度都会有一个刻度是条短线,每逢5的倍数刻度都会标有小时数(1-12)。

指针有三根,分别为秒针、分针和时针,三根指针长度由短及长。秒针走一圈,分针走一个刻度,分针走一圈,时针走一个刻度。

另外,我们还可以在表盘中显示星期和日期。

这样,我们这个时钟的元素就清晰了,包括表盘(60个刻度以及小时数)、指针(三根)、星期和日期。

代码实现

代码

确定了思路之后,我们开始运用海龟绘图的命令来绘制图像。整体代码如下:

import turtle
from datetime import *# 抬起画笔,向前运动一段距离放下
def skip(step):turtle.penup()turtle.forward(step)turtle.pendown()def mkHand(name, length):# 注册Turtle形状,建立表针Turtleturtle.reset()# 先反向运动一段距离,终点作为绘制指针的起点skip(-length * 0.1)# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。turtle.begin_poly()turtle.forward(length * 1.1)# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。turtle.end_poly()# 返回最后记录的多边形。handForm = turtle.get_poly()turtle.register_shape(name, handForm)def init():global secHand, minHand, houHand, printer# 重置Turtle指向北turtle.mode("logo")# 建立三个表针Turtle并初始化mkHand("secHand", 135)mkHand("minHand", 125)mkHand("houHand", 90)secHand = turtle.Turtle()secHand.shape("secHand")minHand = turtle.Turtle()minHand.shape("minHand")houHand = turtle.Turtle()houHand.shape("houHand")for hand in secHand, minHand, houHand:hand.shapesize(1, 1, 3)hand.speed(0)# 建立输出文字Turtleprinter = turtle.Turtle()# 隐藏画笔的turtle形状printer.hideturtle()printer.penup()# 绘制表盘
def setupClock(radius):# 建立表的外框turtle.reset()turtle.pensize(7)for i in range(60):# 向前移动半径值skip(radius)if i % 5 == 0:# 画长刻度线turtle.forward(20)# 回到中心点skip(-radius - 20)# 移动到刻度线终点skip(radius + 20)# 下面是写表盘刻度值,为了不与划线重叠,所以对于特殊位置做了处理if i == 0:turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:skip(25)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))skip(-25)elif (i == 25 or i == 35):skip(20)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))skip(-20)else:turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))# 回到中心点skip(-radius - 20)else:# 画圆点turtle.dot(5)skip(-radius)# 顺时针移动6°turtle.right(6)def week(t):week = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]return week[t.weekday()]def date(t):y = t.yearm = t.monthd = t.dayreturn "%s %d%d" % (y, m, d)def tick():# 绘制表针的动态显示t = datetime.today()second = t.second + t.microsecond * 0.000001minute = t.minute + second / 60.0hour = t.hour + minute / 60.0secHand.setheading(6 * second)minHand.setheading(6 * minute)houHand.setheading(30 * hour)turtle.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()turtle.tracer(True)# 100ms后继续调用tickturtle.ontimer(tick, 100)def main():# 打开/关闭龟动画,并为更新图纸设置延迟。turtle.tracer(False)init()setupClock(160)turtle.tracer(True)tick()turtle.mainloop()if __name__ == "__main__":main()

代码讲解

这里我们讲解一下代码里面的几个方法。

  • skip() 方法是一个公用方法,用于抬起画笔,向前移动一段距离,然后放下画笔。

  • mkHand() 方法是画指针的方法,思路是从表盘的中心点出发,先反向运动一段距离,终点作为绘制指针的起点,然后再向中心点画线作为指针。

  • setupClock() 方法是绘制表盘,绘制表盘主要注意每到第5个刻度需要绘制短线以及标注小时数。

  • tick() 方法是实现我们动态时钟的关键方法,它在初始化时钟的基础上,一方面是显示表盘中的星期和日期信息,另一方面通过定时刷新指针位置来达到实时显示的效果。

  • init() 方法是初始化时钟信息,包括指针和表盘上的星期、日期信息。

最后,我们在 main() 方法中调用了 Tkinter 的 mainloop 函数来启动事件循环,它必须是乌龟图形程序中的最后一个语句。

运行结果

动态时钟

直接运行程序,你会看到一个弹出窗口,上面就是我们绘制的动态时钟了,指针是在走动的哦!

总结

本文通过使用海龟绘图实现了一个动态刷新的时钟,代码本身并不复杂,重要的是实现的思路。如果你觉得有意思,赶紧点在看分享给身边的小伙伴吧!

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起100天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

代码获取方式】

识别文末二维码,回复:200623

用 Python 画动态时钟相关推荐

  1. python画动态爱心代码_教你用python画动态爱心表白

    原标题:教你用python画动态爱心表白 初级画心 学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆: 于是这就很简单了,十行代码解决: import tu ...

  2. python制作动态时钟_python+pygame制作一个可自定义的动态时钟和详解

    #第1步:导出模块 importsys, random, math, pygamefrom pygame.locals import * from datetime importdatetime, d ...

  3. 用python画动态樱花_利用python画一棵漂亮的樱花树,turtle画图代码大全,此处感谢知乎大佬小白...

    利用python画一棵漂亮的樱花树,turtle画图代码大全,此处感谢知乎大佬小白 此处感谢知乎大佬 小白练手 练习一下比较流行的turtle(海龟库) 画一棵漂亮的樱花树,效果如下: ps: 是动态 ...

  4. 小案例:基于python的动态时钟,带十二时辰和经络养身

    一.前言 1.仅用来研究学习使用. 2.除正常显示时钟外,还可以实时显示当前对应的时辰,和经络养身提示. 3.适合辅助上班族来养生 二.效果如下: 三.源码如下: ''' 动态时钟附带十二时辰显示 ' ...

  5. 用python画动态三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图

    在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...

  6. python画动态小黄鸭_20行代码制作字符画版小黄鸭表情包

    前段时间,一只可爱的小黄鸭火起来了,据说是抖音上一位黄衣小姐姐模仿小黄鸭的动作而走红.这只动作呆萌的小黄鸭表情包也跟着火起来了,小黄鸭表情包也由一只变成多只,颜色也变幻莫测.pk 哥的技术交流群前段时 ...

  7. python画动态爱心-使用Python画出小人发射爱心的代码

    我就废话不多说了,直接上代码吧! #2.14 from turtle import * from time import sleep def go_to(x, y): up() goto(x, y) ...

  8. python画动态爱心-【Python】五分钟画一条动态心形曲线~

    0.最终效果 1.绘制一条心形曲线 最近看到个视频,打算绘制个心型动态的曲线. 1.1 Matlab确定图像及其函数 网上有很多关于心形曲线的资料,各种各样的形状,但是我比较倾心于桃心形.先在Matl ...

  9. python画动态爱心-python绘制动态爱心

    CSS布局HTML小编今天和大家分享助用python从数据库取数据动态生成表格的方法 一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表.xlwt(写exce ...

最新文章

  1. 50本.NTE、C#相关技术书籍免费下载
  2. WEB程序打包详解:(连接SQL2005数据库,修改配置文件,建立虚拟目录)
  3. [NLP] TextCNN模型原理和实现
  4. 修改JEECG项目浏览器标题
  5. [转载].程序匠人 - 程序调试(除错)过程中的一些雕虫小技
  6. mysql导致的502_ab压测过程中出现502及操作数据库失败
  7. 解决IISASP调用XmlHTTP出现msxml3.dll (0x80070005) 拒绝访问的错误
  8. Python自动化修改word实例
  9. LeetCode初级算法之数组:36 有效数独
  10. 婚姻:中国女研究生结婚率下降明显 对方学历低看不上
  11. Win11系统注销在哪?Win11系统注销的方法
  12. 海淀区第九届单片机竞赛获奖名单_第九届蓝桥杯国赛电子类单片机设计与开发组获奖名单...
  13. 请使用netty框架实现高效稳定的websocket通信
  14. sighold,sigset,sigrelse,sigpause,sigignore
  15. 成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统
  16. 88是python的整数类型吗_python基本数据类型
  17. 2018 | 七月日记
  18. layui,始终打开最后一页
  19. Oracle表空间扩展
  20. python第七关再来一盘_盘一盘 Python 系列 7 - PyEcharts (v1.0)

热门文章

  1. 新概念英语第三册Lesson 7
  2. 2018年蓝桥杯C++A组幸运数字
  3. PVN3D: A Deep Point-wise 3D Keypoints Voting Network for 6DoF Pose Estimation学习笔记
  4. 水光储一体化微电网调度
  5. 旅游中常用的简单英语会话
  6. 磁珠 磁环 电感的区别
  7. 编译arm linux内核,编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译...
  8. 变电二次安装工实训考核装置QY-PGD22
  9. 演讲译文:鸟和青蛙——数学之两翼
  10. 哪个文字转语音朗读软件好?文字转语音软件有哪些