使用python编程实现与系统时间一致的机械钟效果

#使用turtle 、math 和time模块共同实现系统时间的机械钟效果
from turtle import *
import math as m
import time
#t、t1、t2、t3分别代表四个海龟对象,其实一个也可以达到绘制效果,但是
#只使用一个海龟对象的话,undo()函数只能删除一步操作(或者说是撤销一
#步操作),之前绘制的图形(指针)不能删除。其效果就是删除旧指针,
#绘制新指针。
t=Turtle()  #用于绘制钟面(表盘刻度)
t1=Turtle() #用于绘制时针
t2=Turtle() #用于绘制分针
t3=Turtle() #用于绘制秒针
#以下代码是绘制钟面
t.color("red")
t.penup()
t.goto(0,200)
t.pendown()
t.circle(-200)
t.penup()
for i in range(12): #该循环用于绘制钟表12个刻度(两点确定一条线段)   
    t.penup()
    t.pensize(3)
    t.goto(200*m.cos(3.14/2-3.14/6*i),200*m.sin(3.14/2-3.14/6*i))
    t.pendown()
    t.goto(180*m.cos(3.14/2-3.14/6*i),180*m.sin(3.14/2-3.14/6*i))
    #t.pensize(20)
    t.penup()
    #以下两个t.goto()函数是定位输入时间刻度的位置
    t.goto(170*m.cos(3.14/2-3.14/6*i),170*m.sin(3.14/2-3.14/6*i)-8)
    t.pensize(1) 
    if i>0:#输入钟盘上的数字1-11
        t.write(i)
    if i+1==12: #输入钟盘上的数字12
        t.goto(170*m.cos(3.14/2-3.14/6*(i+1)),170*m.sin(3.14/2-3.14/6*(i+1))-8)
        t.write(12)            
    for j in range(1,5):#该层循环是绘制时刻之间的小刻度
        t.penup()
        t.goto(200*m.cos(3.14/2-3.14/6*i-3.14/30*j),200*m.sin(3.14/2-3.14/6*i-3.14/30*j))
        t.pendown()
        t.goto(185*m.cos(3.14/2-3.14/6*i-3.14/30*j),185*m.sin(3.14/2-3.14/6*i-3.14/30*j))
        t.penup()
t.goto(0,-250)
t.pendown()
t.setheading(0)
t.circle(250)
t.penup()
t.home()
t.pendown()
t.hideturtle()
sj=time.strftime("%H:%M:%S") #以时分秒的格式获取系统时间
xs=sj[0:2] #以列表的方式截取小时数
fz=sj[3:5] #以列表的方式截取分钟数
mz=sj[6:8] #以列表的方式截取系统当前秒数
#以下三行绘制时针(t1对象绘制分针)
t1.pensize(8)
t1.hideturtle()
t1.goto(60*m.cos(3.14/2-3.14/6*int(xs)-int(fz)/60*3.14/6),60*m.sin(3.14/2-3.14/6*int(xs)-int(fz)/60*3.14/6))       
#以下三行绘制分针(t2对象绘制分针)
t2.pensize(5)
t2.hideturtle()
t2.goto(100*m.cos(3.14/2-3.14/30*int(fz)),100*m.sin(3.14/2-3.14/30*int(fz)))
while int(mz)>=0:
    sj=time.strftime("%H:%M:%S")
    xs=sj[0:2]
    fz=sj[3:5]
    mz=sj[6:8]
    t3.speed(0) #设置成0才有指针转动的效果
    #绘制秒针
    t3.goto(150*m.cos(3.14/2-3.14/30*int(mz)),150*m.sin(3.14/2-3.14/30*int(mz)))
    time.sleep(1) #延迟1秒
    t3.undo()   #删除之前绘制的秒针 
    t3.hideturtle() #隐藏小海龟
    #以下if语句达到条件(当前系统秒数为0)将删除之前的旧分针,重新绘制新时刻的分针
    if int(mz)==0:        
        t2.undo() #删除旧分针
        t2.home() #回到原地坐标(0,0)或者是钟面中心点
        t2.speed(0)   #设置成0才有指针转动的效果
        #绘制新分针
        t2.goto(100*m.cos(3.14/2-3.14/30*int(fz)),100*m.sin(3.14/2-3.14/30*int(fz)))
    #以下if语句达到条件(当前系统分针数为0)将删除之前的旧时针,重新绘制新时刻的时针
    if int(fz)==0:        
        t1.undo() #删除旧时针
        t1.home()
        t1.speed(0)
        #绘制新时针
        t1.goto(60*m.cos(3.14/2-3.14/6*int(xs)-int(fz)/60*3.14/6),60*m.sin(3.14/2-3.14/6*int(xs)-int(fz)/60*3.14/6))      

效果图

 
        
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
OSZAR »