运行效果:

源代码:

  1 # coding=utf-8
2
3 import turtle
4 from datetime import *
5
6 # 抬起画笔,向前运动一段距离放下
7 def Skip(step):
8 turtle.penup()
9 turtle.forward(step)
10 turtle.pendown()
11
12 def mkHand(name, length):
13 # 注册Turtle形状,建立表针Turtle
14 turtle.reset()
15 Skip(-length * 0.1)
16 # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
17 turtle.begin_poly()
18 turtle.forward(length * 1.1)
19 # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
20 turtle.end_poly()
21 # 返回最后记录的多边形。
22 handForm = turtle.get_poly()
23 turtle.register_shape(name, handForm)
24
25 def Init():
26 global secHand, minHand, hurHand, printer
27 # 重置Turtle指向北
28 turtle.mode("logo")
29 # 建立三个表针Turtle并初始化
30 mkHand("secHand", 135)
31 mkHand("minHand", 125)
32 mkHand("hurHand", 90)
33 secHand = turtle.Turtle()
34 secHand.shape("secHand")
35 minHand = turtle.Turtle()
36 minHand.shape("minHand")
37 hurHand = turtle.Turtle()
38 hurHand.shape("hurHand")
39
40 for hand in secHand, minHand, hurHand:
41 hand.shapesize(1, 1, 3)
42 hand.speed(0)
43
44 # 建立输出文字Turtle
45 printer = turtle.Turtle()
46 # 隐藏画笔的turtle形状
47 printer.hideturtle()
48 printer.penup()
49
50 def SetupClock(radius):
51 # 建立表的外框
52 turtle.reset()
53 turtle.pensize(7)
54 for i in range(60):
55 Skip(radius)
56 if i % 5 == 0:
57 turtle.forward(20)
58 Skip(-radius - 20)
59
60 Skip(radius + 20)
61 if i == 0:
62 turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
63 elif i == 30:
64 Skip(25)
65 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
66 Skip(-25)
67 elif (i == 25 or i == 35):
68 Skip(20)
69 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
70 Skip(-20)
71 else:
72 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
73 Skip(-radius - 20)
74 else:
75 turtle.dot(5)
76 Skip(-radius)
77 turtle.right(6)
78
79 def Week(t):
80 week = ["星期一", "星期二", "星期三",
81 "星期四", "星期五", "星期六", "星期日"]
82 return week[t.weekday()]
83
84 def Date(t):
85 y = t.year
86 m = t.month
87 d = t.day
88 return "%s年%d月%d日" % (y, m, d)
89
90 def Tick():
91 # 绘制表针的动态显示
92 t = datetime.today()
93 second = t.second + t.microsecond * 0.000001
94 minute = t.minute + second / 60.0
95 hour = t.hour + minute / 60.0
96 secHand.setheading(6 * second)
97 minHand.setheading(6 * minute)
98 hurHand.setheading(30 * hour)
99
100 turtle.tracer(False)
101 printer.forward(65)
102 printer.write(Week(t), align="center",
103 font=("Courier", 14, "bold"))
104 printer.back(130)
105 printer.write(Date(t), align="center",
106 font=("Courier", 14, "bold"))
107 printer.home()
108 turtle.tracer(True)
109
110 # 100ms后继续调用tick
111 turtle.ontimer(Tick, 100)
112
113 def main():
114 # 打开/关闭龟动画,并为更新图纸设置延迟。
115 turtle.tracer(False)
116 Init()
117 SetupClock(160)
118 turtle.tracer(True)
119 Tick()
120 turtle.mainloop()
121
122 if __name__ == "__main__":
123 main()

Python Turtle库绘制表盘时钟的更多相关文章

  1. Python turtle库绘制简单图形

    一.简介 Python中的turtle库是一个直观有趣的图形绘制函数库.turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形. 二.简单的图形列举 1.绘制4个不同 ...

  2. Python Turtle库绘制蟒蛇

    使用Python Turtle库来绘制蟒蛇 import turtle引入了海龟绘图体系 使用setup函数,设定了一个宽650像素和高350像素的窗体,其位置左上角坐标是200,200 说明位置在距 ...

  3. python turtle库的几个小demo

    一.先上图 一个同切圆和五角星 上代码 import turtle #同切圆 turtle.pensize(2) turtle.circle(10) turtle.circle(40) turtle. ...

  4. Python turtle库详解

    Python turtle库详解 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在 ...

  5. Python turtle库的画笔控制说明

    turtle.penup() 别名 turtle.pu() :抬起画笔海龟在飞行 turtle.pendown() 别名 turtle.pd():画笔落下,海龟在爬行 turtle.pensize(w ...

  6. 使用turtle库绘制图形

    1.使用turtle库绘制红色五角星图形 import turtle n = eval(input("请输入五角星的长度")) turtle.begin_fill() #开始填充颜 ...

  7. python使用turtle库绘制奥运五环

    效果图: #奥运五环 import turtle turtle.setup(1.0,1.0) #设置窗口大小 turtle.title("奥运五环") #蓝圆 turtle.pen ...

  8. python turtle库

    turtle库初步 先看 https://www.cnblogs.com/chy8/p/9448606.html 一 turtle库介绍 turtle乌龟 import turtle from tur ...

  9. Python turtle库学习笔记

    1.简介 Python的turtle库的易操作,对初学者十分友好.对于初学者来说,刚学编程没多久可以写出许多有趣的可视化东西,这是对学习编程极大的鼓舞,可以树立对编程学习的信心.当然turtle本身也 ...

随机推荐

  1. Casbin入选2022 Google编程之夏

    Casbin入选2022 Google编程之夏! Google编程之夏(Google Summer of Code,GSoC),是由Google公司所主办的年度开源程序设计项目,第一届从2005年开始 ...

  2. C#+SQL Server的数据库管理系统常用的代码

    数据库管理系统 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称DBMS.它对数据库进行统一的管理和控制,以保证 ...

  3. vim编写C/C++程序过程

    vim编写C.C++程序过程(以hello world为例): vim hello.c/hello.cpp 或者vi hello.c/hello.cpp创建hello.c/hello.cpp文件并进入 ...

  4. Mysql等保部分加固

    一.等保要求:操作系统和数据库系统管理用户身份标识应具有不易被冒用的特点,口令应有复杂度要求并定期更换. 实施步骤: 启用口令复杂审核(5.6.6版本以上,才有此模块功能,需要重启mysql). 查看 ...

  5. vue学习过程总结(01)- 开发环境的搭建

    1.本地vue开发环境的搭建 1.1.下载NodeJs.下载地址:https://nodejs.org/en/download/ node.js的相关结束以及教程:https://www.runoob ...

  6. 如何在 Java 中实现二叉搜索树

    二叉搜索树 二叉搜索树结合了无序链表插入便捷和有序数组二分查找快速的特点,较为高效地实现了有序符号表.下图显示了二叉搜索树的结构特点(图片来自<算法第四版>): 可以看到每个父节点下都可以 ...

  7. K8S原来如此简单(七)存储

    emptyDir临时卷 有些应用程序需要额外的存储,但并不关心数据在重启后仍然可用. 例如,缓存服务经常受限于内存大小,将不常用的数据转移到比内存慢.但对总体性能的影响很小的存储中. 再例如,有些应用 ...

  8. Adobe AIR 应用程序图标详细描述

    官方PDF文档: http://help.adobe.com/zh_CN/air/build/WS901d38e593cd1bac1e63e3d129907d2886-8000.html#WS901d ...

  9. mysql主从异步复制过程

    mysql是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证mysql数据库的可靠性.就要会一些提高可靠性的技术. 主从复制原理如下. slave(从服务器) master(主服务器) ...

  10. Dubbo 的整体架构设计有哪些分层?

    接口服务层(Service):该层与业务逻辑相关,根据 provider 和 consumer 的 业务设计对应的接口和实现 配置层(Config):对外配置接口,以 ServiceConfig 和  ...