1、表盘

 from turtle import *
from datetime import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() 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)#回到圆心,方向旋转6度 SetupClock(160)

2、添加指针

 from turtle import *
from datetime import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() def mkHand(name, length):
#注册Turtle形状,建立表针Turtle
#清空窗口,重置默认值
Skip(-length*0.1)#先回一点
begin_poly()#初始点
forward(length*1.1)
end_poly()#结束点
handForm = get_poly()#返回最后记录的多边形
register_shape(name, handForm)#寄存器形状,安装相应的多边形
goto(0,0) def Init():
global secHand, minHand, hurHand, printer
mode("logo")# 重置Turtle指向北 #建立三个表针Turtle并初始化
mkHand("secHand", 125)
right(30)
mkHand("minHand", 110)
right(30)
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)#回到圆心,方向旋转6度 Init()
tracer(False)
SetupClock(160)

3、时间

 from datetime import *
from turtle import * #时分秒
t = datetime.today()
print(t)
print(t.microsecond)
print(t.second)
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0 #星期
print(t.weekday())
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
print(week[t.weekday()]) #年月日
y = t.year
m = t.month
d = t.day
# return "%s %d %d" % (y, m, d)
print(y,"-",m,"-",d) tracer(False)
mode("logo")# 重置Turtle指向北
printer = Turtle()
printer.forward(65)
printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.back(130)
printer.write("%d-%d-%d"%(y,m,d),align="center",font=("Courier", 14, "bold"))#日期标在图中

 from datetime import *
from turtle import * #时分秒
t = datetime.today()
print(t)
print(t.microsecond)
print(t.second)
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0 #星期
print(t.weekday())
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
print(week[t.weekday()]) #年月日
y = t.year
m = t.month
d = t.day
# return "%s %d %d" % (y, m, d)
print(y,"-",m,"-",d) tracer(False)
mode("logo")# 重置Turtle指向北
printer = Turtle()
printer.hideturtle()
printer.penup()#提起画笔,便没了那两道轨迹
printer.forward(65)
printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.back(130)
printer.write("%s-%d-%d"%(y,m,d),align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.home()
tracer(True)

 from datetime import *
from turtle import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() def mkHand(name, length):
#注册Turtle形状,建立表针Turtle
#清空窗口,重置默认值
Skip(-length*0.1)#先回一点
begin_poly()#初始点
forward(length*1.1)
end_poly()#结束点
handForm = get_poly()#返回最后记录的多边形
register_shape(name, handForm)#寄存器形状,安装相应的多边形
goto(0,0) def Init():
global secHand, minHand, hurHand, printer
mode("logo")# 重置Turtle指向北
right(90)
#建立三个表针Turtle并初始化
mkHand("secHand", 125)
right(30)
mkHand("minHand", 110)
right(30)
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)#回到圆心,方向旋转6度 tracer(False)
Init()
SetupClock(160)
tracer(True) #时分秒
t = datetime.today()
print(t)
print(t.microsecond)
print(t.second)
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0 #星期
print(t.weekday())
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
print(week[t.weekday()]) #年月日
y = t.year
m = t.month
d = t.day
# return "%s %d %d" % (y, m, d)
print(y,"-",m,"-",d) tracer(False)
#mode("logo")# 重置Turtle指向北
printer = Turtle()
printer.penup()
printer.hideturtle()
printer.forward(65)
printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.back(130)
printer.write("%d-%d-%d"%(y,m,d), align="center",font=("Courier", 14, "bold"))#日期标在图中
tracer(True)

4、动态显示

将时间和角度对应起来,换算到角度,然后和指针对应起来

 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", 115)
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)#回到圆心,方向旋转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)
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() if __name__ == "__main__":
main()

python ——钟表的更多相关文章

  1. 有限状态机(Python)

    有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.FSM是一种算法思想,简单而言,有限状 ...

  2. Python::OS 模块 -- 进程管理

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...

  3. D14——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...

  4. tensorflow和python操作中的笔记

    前一段时间做了一些项目,把一些笔记放在了txt中,现分享出来,自己也能够时长预习. 1) 读取文件时,将固定的文件地址,采用数组或者字符串的形式,提前表示出来,后期使用时候采用拼接操作 2) # 得到 ...

  5. 【python】列出http://www.cnblogs.com/xiandedanteng中所有博文的标题

    代码: # 列出http://www.cnblogs.com/xiandedanteng中所有博文的标题 from bs4 import BeautifulSoup import requests u ...

  6. Python练手项目实例汇总(附源码下载)

    今天给大家分享几个有趣的Python练手项目实例,希望对Python初学者有帮助哈~ 一.经典的俄罗斯方块   1. 绑定功能 1 # 绑定功能 2 class App(Frame): 3 def _ ...

  7. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  8. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  9. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

随机推荐

  1. python学习(二)之turtle库绘图

    今天是三月七号,也就是女生节,或者女神节.不知道你是不是有自己喜欢的女孩子,在这里你可以用turtle库绘制一朵玫瑰花,送给你喜欢的姑娘.(拉到最后有惊喜哦)但在画这朵玫瑰花之前,先来一个基础的图形, ...

  2. yuchuan_Linux_C 编程之七系统IO函数

    一.整体大纲 二. 系统IO函数 1. 一些概念    文件描述符     PCB     C库函的IO缓冲区 1) 文件描述符            int 类型            一个进程最多 ...

  3. Drf(DjangoRestFramewok)

    第一部分 问题 1.前后端分离? vue.js 后端给前段返回json数据 2.移动端盛行. app 后端给app返回json数据 3.PC端应用? crm项目,前段后端一起写,运行在浏览器上. 一般 ...

  4. 01 UIPath抓取网页数据并导出Excel(非Table表单)

    上次转载了一篇<UIPath抓取网页数据并导出Excel>的文章,因为那个导出的是table标签中的数据,所以相对比较简单.现实的网页中,有许多不是通过table标签展示的,那又该如何处理 ...

  5. 常见的几种JavaScript内存泄露

    总结一下常见的几种JavaScript内存泄露: 1.意外的全局变量 全局变量属于window对象,所以只会随着window销毁才会销毁. 2.console.log() conaole.log()函 ...

  6. 项目中 关于localstorage、cookie的坑?明明设置了本地存储为什么没生效

    1.简单的介绍一下localStorage,sessionStorage,cookie localStorage:仅在客户端存储不参与服务器通信,存储大小一般为5M,如果不是人为清除,那么即使是关闭浏 ...

  7. Mybatis(二) Mybatis通用的写法

    2.1 用来循环容器的标签forEach,查看例子   foreach元素的属性主要有item,index,collection,open,separator,close. item:集合中元素迭代时 ...

  8. 妈妈再也不担心我面试被Redis问得脸都绿了

    长文前排提醒,收藏向前排提醒,素质三连 (转发 + 在看 + 留言) 前排提醒! 前言 Redis 作为一个开源的,高级的键值存储和一个适用的解决方案,已经越来越在构建 「高性能」.「可扩展」 的 W ...

  9. GitLab → 搭建私有的版本控制的托管服务平台

    开心一刻 睡着正香,媳妇用力把我晃醒说:“快起来,我爸来了.” 我一下醒了,手脚熟练的把衣服一抱,滚到床底,顺便把鞋也收了进去 媳妇蹲下无奈的说:“快出来!咱俩都结婚半年了.” 我:“对哦,搞习惯了” ...

  10. C# 在DataGridView中,点击单元格调出 TreeView控件 或 ListBox控件

    1.调出 TreeView控件 或  ListBox控件 private void deductGrid1_CellClick(object sender, DataGridViewCellEvent ...