找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 文档 工具 设计
查看: 151|回复: 0

用Python的初学turtle实现时钟

[复制链接]

2万

主题

1249

回帖

2万

积分

超级版主

教育辅助界扛把子

附加身份标识
精华
1
热心
7
听众
1
威望
48
贡献
14309
违规
0
书币
49983
注册时间
2020-4-8

论坛元老灌水之王

发表于 2022-12-27 02:49 | 显示全部楼层 |阅读模式
这用了海龟库,比较简单,初学写的
代码:

[Python] 纯文本查看 复制代码
from turtle import *  ## 导入turtle库
from datetime import *  ## 导入时间库
 
def Skip(step):
    penup()
    forward(step)
    pendown()
 
## 定义Turtle形状,建立指针Turtle
def mkHand(name, length): 
    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)
    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 = ["Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday", "Sunday"]
    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", 16, "bold"))
    printer.back(130)
    printer.write(Date(t), align="center",
                  font=("Courier", 16, "bold"))
    printer.home()
    tracer(True)
 
    ontimer(Tick, 100) 
    ##设置为100毫秒后继续调用tick函数
 
def main():
    tracer(False)
    Init()
    SetupClock(160)
    tracer(True)
    Tick()
    mainloop()
 
## 文件作为脚本直接执行才会被执行,
## 而import到其他脚本中是不会被执行的声明
if __name__ == "__main__":       
    main()


都是内置库,可直接运行

Great works are not done by strength, but by persistence! 历尽艰辛的飞升者,成了围剿孙悟空的十万天兵之一。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@cdsy.xyz

QQ|Archiver|手机版|小黑屋|城东书院 ( 湘ICP备19021508号-1|湘公网安备 43102202000103号 )

GMT+8, 2024-11-21 21:02 , Processed in 0.040794 second(s), 27 queries .

Powered by Discuz! CDSY.XYZ

Copyright © 2019-2023, Tencent Cloud.

快速回复 返回顶部 返回列表