Python动态时钟

# -*- coding: utf-8 -*-
'''使用turtle库绘制动态时钟'''
##  导入库
import turtle as t
from datetime import *
###########  定义函数   ###########
def Skip(step):
    t.penup()
    t.forward(step)
    t.pendown()
def Date(tim):
    y = tim.year
    m = tim.month
    d = tim.day
    return "%s %d% d" % (y, m, d)
def Week(tim):
    week = ["星期一", "星期二", "星期三", "星期四", "星期五",
            "星期六", "星期日"]
    return week[tim.weekday()]
#### 绘制表框
def SetupClock():
    t.mode("logo")  # logo模式
    t.setup(600, 600, 10, 100)  # 画布大小600*600 起始点的坐标 窗口的宽度,
    t.dot(10)
    t.seth(-90)
    Skip(200)
    t.pensize(3)
    t.seth(0)
    t.circle(-200)  #钟表外框半径:200
    t.seth(90)
    Skip(50)
    t.dot(5)
    t.seth(0)
    for _ in range(59):
        t.pu()
        t.circle(-150, 6)
        t.pd()
        t.dot(5)
    t.pu()
    # 画12条线段 写上对应的时间数字
    t.home()
    t.pensize(5)
    t.seth(30)
    for i in range(12):
        t.fd(150)
        t.pd()
        t.fd(10)
        if(i<2 or i>8):
            Skip(5)
        elif(i==2 or i==8):
            Skip(10)
        elif (i == 3 or i == 7):
            Skip(20)
        else:
            Skip(25)
        t.write(i + 1, align="center", font=('Courier', 15, 'bold'))  # 写上对应的时间数字
        t.up()
        t.setx(0)
        t.sety(0)
        t.rt(30)
#### 定义指针(秒 分 时)形状
def makePoint(pointName,length):
    t.home()
    t.pu()
    t.begin_poly()
    t.back(0.1 * length)
    t.forward(length * 1.1)
    t.end_poly()
    poly = t.get_poly()
    t.register_shape(pointName, poly)
    t.home()
#### 绘制指针
def drawPoint():
    global hourPoint, minPoint, secPoint, fontWriter
    makePoint("HourPoint",80,)
    makePoint("MinutePoint", 110)
    makePoint("secondPoint", 140)
    t.hideturtle()
    hourPoint = t.Pen()
    hourPoint.shape("HourPoint")
    hourPoint.shapesize(1, 1, 4) #时针的宽,长和轮廓
    minPoint = t.Pen() #分针
    minPoint.shape("MinutePoint")
    minPoint.shapesize(1, 1, 3)
    secPoint = t.Pen() #秒针
    secPoint.shape("secondPoint")
    secPoint.shapesize(1, 1, 2)
    secPoint.pencolor('red')
    fontWriter = t.Pen() #write项
    fontWriter.hideturtle()
#### 绘制时间及指针
def ShowTime():
    tim = datetime.today() # 获得当前日期
    curr = datetime.now()  # 日期-时间
    curr_hour = curr.hour
    curr_minute = curr.minute
    curr_second = curr.second
    t.tracer(False)  #直接显示绘制结果
    hourPoint.setheading(curr_hour*30+ 30 / 60 * curr_minute)
    minPoint.setheading(curr_minute*6)
    secPoint.setheading(curr_second*6)
    fontWriter.clear()
    fontWriter.up()
    # 写日期
    fontWriter.setx(0)
    fontWriter.sety(-50)
    fontWriter.write(Date(tim), align="center", font=("Courier", 15, "bold"))
    # 写时间
    fontWriter.setx(0)
    fontWriter.sety(-70)
    fontWriter.write(str(tim.hour) + ":" + str(tim.minute) + ":" + str(tim.second), align="center", font=("Courier", 15, "bold"))
    # 写星期
    fontWriter.setx(0)
    fontWriter.sety(60)
    fontWriter.write(Week(tim), align="center", font=("Courier", 15, "bold"))
    t.tracer(True)
    t.ontimer(ShowTime, 100)
def main():
    t.tracer(False) # 不显示绘制的过程
    SetupClock()  #绘制表框
    drawPoint()
    t.tracer(True)  # 显示绘制的过程
    ShowTime()
    t.done()
if __name__ == "__main__":
    main()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值