前言

Turtle是Python自带的画图库,很有意思也很好用。在IDLE里面可以找到一些demo

画表就很经典了,但是我总觉得demo里面那个表,对于一个新手来说很不友好,因为全是函数,画图的逻辑不直观。所以我当年刚玩的时候,是自己摸索着画的。现在再看也是感觉很不错~

思路

总体来看,分为两个部分:固定的表盘,和不断刷新的指针(和时间显示)

在开始之前先准备一下:

from turtle import *
import datetime as dt
import math
import timetracer(False)    # 完成之后再添加:最快速度
title('时钟')    # 标题
penup()          # 保持画笔抬起

以及提醒一下,如果在某些编辑器里面运行出现画完闪退的情况,可以在代码最后面加一行:

mainloop()

这个是turtle库里面的函数:turtle.mainloop(),用来维持窗口

固定的表盘

我的表盘长这个样子:

分为三个部分:60个dot点(分、秒),12条杠(小时),以及12个数字(小时)

这里还涉及一个取点位置的问题:极坐标

计算用到的是 math 库里面的 sincos 函数,其输入是弧度,所以要记得转化一下。

1.    首先是画60个点:(取半径为200)

# 画点
left(90)
for i in range(12*5):x=200*math.sin(i/30*math.pi)    # 横坐标y=200*math.cos(i/30*math.pi)    # 纵坐标goto(x,y)dot(7)

2.    其次,画12条杠,同步写上12个数字:

setheading(60)
pensize(10)for i in range(1,13):x=200*math.sin(i/6*math.pi)y=200*math.cos(i/6*math.pi)goto(x,y)pendown()forward(20)penup()write(i, font=('Times New Roman',20,'normal','bold'))right(30)setheading(0)

至此表盘绘制完成,应该跟上面的截图一样。(细节可以自行修改)

刷新的指针

这一步分为两个部分,一个是画上去,另一个是刷新

画指针,首先就是需要获取现在的时间,用的是datetime库的函数:datetime.datetime.now()

根据现在的时间,可以分别得到秒针、分针、时针所指的角度。:(不考虑微秒)

​​​​​​​        

​​​​​​​        

但是,由于坐标系本身是逆时针的,而且时钟的起点在坐标系是90度,所以:

#再让表走:
while True:T = dt.datetime.now()angle_hour = 30*T.hour+T.minute/2+T.second/120angle_minute = T.minute*6+T.second/10angle_second = T.second*6# 小时goto(0,0)setheading(90-angle_hour)pendown()pensize(7)forward(120)penup()# 分钟goto(0,0)setheading(90-angle_minute)pendown()pensize(5)forward(150)penup()# 秒goto(0,0)setheading(90-angle_second)pendown()pensize(3)forward(170)penup()# 刷新update()time.sleep(0.1)

可以看到,这个时候指针已经画好,就差最后一步:把旧的指针清除。

这里有两种方案,一种是现在看来比较常见的:把整个画布清除,再从头开始画

我最开始没有想到这个,反而是想到了撤销 undo() 这个功能

也就是第二种:通过 for 循环,把之前画指针的操作给挨个撤销掉。(要计算画指针用了多少步)

for i in range(18):undo()

这个要添加在上面的 time.sleep(0.1) 后面。也就是说,整个刷新操作就是:

先刷新,再停顿,最后撤销。(之后进入下一循环)

至此基本功能全部完成。更多个性化设置(如颜色、文字显示)可以自行研发

附:

  • Turtle库的官方文档:

turtle — Turtle graphics — Python 3.7.14 documentation

  • 整体的代码(有些增删):
from turtle import *
import datetime as dt
import math
import time# 先画固定的表盘:
tracer(False)
title('时钟')
penup()left(90)
for i in range(12*5):x=200*math.sin(i/30*math.pi)y=200*math.cos(i/30*math.pi)goto(x,y)dot(7)if i%5==0:pendown()pensize(10)forward(20)penup()if i==0:write('12',align='center',font=('Times New Roman',20,'normal','bold'))else:write(str(int(i/5)),font=('Times New Roman',20,'normal','bold'))right(30)# 再安排当前日期:
t=dt.datetime.now()
year=t.year
month=t.month
day=t.day
week=t.isoweekday()
goto(0,100)
Week=['一','二','三','四','五','六','日']
write('星期'+Week[week-1],align='center',font=('楷体',20,'bold'))
goto(0,-100)
date=str(year)+'  '+str(month)+'  '+str(day)
write(date,align='center',font=('Times New Roman',20,'bold'))# 再让表走:
print('直接叉掉退出')
while 1>0:T=dt.datetime.now()t=str(T.hour)+': '+str(T.minute)+': '+str(T.second)angle1=30*T.hour+T.minute/2+T.second/120angle2=T.minute*6+T.second/10angle3=T.second*6goto(0,0)setheading(90-angle1)pendown()pensize(7)forward(120)penup()goto(0,0)setheading(90-angle2)pendown()pensize(5)forward(150)penup()goto(0,0)setheading(90-angle3)pendown()pensize(3)forward(170)stamp()penup()goto(0,-150)write(t,align='center',font=('Times New Roman',20,'bold'))try:for i in range(20):undo()except Terminator:breaktime.sleep(0.1)# mainloop()

有问题欢迎以各种形式提出 ~

Python入门:使用turtle库 绘制时钟(经典画表)相关推荐

  1. python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...

    使用python图形模块turtle库绘制樱花.玫瑰.圣诞树代码实例 发布时间:2020-08-22 15:57:19 来源:脚本之家 阅读:76 作者:Soul fragments 今天为大家介绍几 ...

  2. python樱花代码_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例

    今天为大家介绍几个Python"装逼"实例代码,python绘制樱花.玫瑰.圣诞树代码实例,主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图(这个是动态 ...

  3. 用python画圣诞树-使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例

    今天为大家介绍几个Python"装逼"实例代码,python绘制樱花.玫瑰.圣诞树代码实例,主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图(这个是动态 ...

  4. 用python中的turtle库绘制一些有趣的图

    最近有个在读大学的女生,想要我帮忙用python画几个图,在画的过程中觉得有些图还挺有意思的,分享给大家.    1 图1    第一个图是蚊香,感兴趣的小伙伴可以自己尝试在python中用turtl ...

  5. 绘制图形可以使用什么python数据库_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...

    今天为大家介绍几个Python"装逼"实例代码,python绘制樱花.玫瑰.圣诞树代码实例,主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图(这个是动态 ...

  6. 使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  7. 怎么用python画简单的图-使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  8. python用turtle库绘制树图形_使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  9. python画简单图-使用Python中的Turtle库绘制简单的图形

    Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...

  10. python中用turtle绘制时钟_python使用turtle库绘制时钟

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. 教你如何通过分析GC日志来进行JVM调优
  2. 理解 __doPostBack(转)
  3. 将两个有序链表合并,合并后仍然有序
  4. java中list排序
  5. MyBatis(1):MyBatis入门
  6. 多线程编程(15) - 多线程同步之 WaitableTimer (等待定时器对象)[续]
  7. 分布式系统原理 之1 数据分布方式
  8. C/C++ 编译器优化
  9. Python新闻网站项目-4.数据处理和算法应用
  10. [论文]基于强化学习的控制输入非线性水下机器人自适应神经网络控制
  11. Graph U-Nets小结
  12. java调用百度Ocr识别以及报错SDK108的解决办法
  13. 英语与计算机工作总结,2017年上学期英语教师个人工作总结与2017年上学期计算机教学工作总结合集.doc...
  14. java登陆密码加密怎么做,Java如何实现密码加密
  15. python3编译成pyc文件
  16. uboot drm框架
  17. Git简单通俗易懂教程(包含常见问题与实战运用)
  18. STC仿真芯片原理探讨
  19. 我的世界基岩版种子和java版种子_我的世界:两个基岩版“神种”,55米高的前哨站,裸露的村庄要塞...
  20. python方差齐性检验_讲讲如何来检验方差齐性

热门文章

  1. 大数据科学相关岗位,我们需要具备哪些数学基础?
  2. 设计模式的三大分类及六大原则
  3. 2020-08-21 第一次面试小结
  4. 无监督学习K-means文本聚类实践
  5. 用记事本写表白html,抖音电脑弹窗表白代码怎么弄_记事本vbs告白代码写法介绍_抖音表白套路方法分享...
  6. Android 安装腾讯X5内核
  7. Java-JVM调优经验
  8. 如何获取最新中国县级行政区划矢量数据
  9. 金蝶记账王和易记账哪个好_金蝶易记账和记账王的区别是什么?金蝶易记账的具体操作如下...
  10. GitHub 的 10 分钟快速入门教程