python 用turtle库绘制时钟

本文介绍如何使用Python的turtle模块来创建一个动态显示时间的模拟时钟,并在时钟界面上显示星期与日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)#通过上述代码得到了3个表针的对象

def Init():
    global secHand, minHand, hurHand, printer
    mode("logo")# 重置Turtle指向北
    #建立三个表针Turtle并初始化
    mkHand("secHand", 125)
    mkHand("minHand",  130)
    mkHand("hurHand", 90)#建立3个表针初始化
    secHand = Turtle()#Turtle是turtle模块中的一个类,这样将三个表针实例化
    secHand.shape("secHand")#建立秒针对象,shape是Turtle类中的方法
    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)

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)#表针对象中的setheading方法接受参数,设置当前朝向角度
    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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值