python制作一个实时钟表

举报
hacker707 发表于 2022/03/24 12:48:25 2022/03/24
【摘要】 @TOC 源代码python引入两个内置库turtle和datetime即可制作一个实时钟表,代码如下:# 用turtle画时钟# 以自定义shape的方式实现import turtle as timport datetime as ddef skip(step): # 抬笔,跳到一个地方 t.penup() t.forward(step) t.pendown()def ...

@TOC

源代码

python引入两个内置库turtle和datetime即可制作一个实时钟表,代码如下:

# 用turtle画时钟
# 以自定义shape的方式实现
import turtle as t
import datetime as d


def skip(step):  # 抬笔,跳到一个地方
    t.penup()
    t.forward(step)
    t.pendown()


def drawClock(radius):  # 画表盘
    t.speed(0)
    t.mode("logo")  # 以Logo坐标、角度方式
    t.hideturtle()
    t.pensize(7)
    t.home()  # 回到圆点
    for j in range(60):
        skip(radius)
        if (j % 5 == 0):
            t.forward(20)
            skip(-radius - 20)
        else:
            t.dot(5)
            skip(-radius)
        t.right(6)


def makePoint(pointName, len):  # 钟的指针,时针、分针、秒针
    t.penup()
    t.home()
    t.begin_poly()
    t.back(0.1 * len)
    t.forward(len * 1.1)
    t.end_poly()
    poly = t.get_poly()
    t.register_shape(pointName, poly)  # 注册为一个shape


def drawPoint():  # 画指针
    global hourPoint, minPoint, secPoint, fontWriter
    makePoint("hourPoint", 100)
    makePoint("minPoint", 120)
    makePoint("secPoint", 140)
    hourPoint = t.Pen()  # 每个指针是一只新turtle
    hourPoint.shape("hourPoint")
    hourPoint.shapesize(1, 1, 6)
    minPoint = t.Pen()
    minPoint.shape("minPoint")
    minPoint.shapesize(1, 1, 4)
    secPoint = t.Pen()
    secPoint.shape("secPoint")
    secPoint.pencolor('red')
    fontWriter = t.Pen()
    fontWriter.pencolor('gray')
    fontWriter.hideturtle()


def getWeek(weekday):
    weekName = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
    return weekName[weekday]


def getDate(year, month, day):
    return "%s-%s-%s" % (year, month, day)


def getRealtime():
    curr = d.datetime.now()
    curr_year = curr.year
    curr_month = curr.month
    curr_day = curr.day
    curr_hour = curr.hour
    curr_minute = curr.minute
    curr_second = curr.second
    curr_weekday = curr.weekday()
    t.tracer(False)
    secPoint.setheading(360 / 60 * curr_second)
    minPoint.setheading(360 / 60 * curr_minute)
    hourPoint.setheading(360 / 12 * curr_hour + 30 / 60 * curr_minute)
    fontWriter.clear()
    fontWriter.home()
    fontWriter.penup()
    fontWriter.forward(80)
    # 用turtle写文字
    fontWriter.write(getWeek(curr_weekday), align="center", font=("Courier", 14, "bold"))
    fontWriter.forward(-160)
    fontWriter.write(getDate(curr_year, curr_month, curr_day), align="center", font=("Courier", 14, "bold"))
    t.tracer(True)
    print(curr_second)
    t.ontimer(getRealtime, 1000)  # 每隔1000毫秒调用一次realTime()


def main():
    t.tracer(False)
    drawClock(160)
    drawPoint()
    getRealtime()
    t.tracer(True)
    t.mainloop()


if __name__ == '__main__':
    main()


==引用模块==:turtle,datetime
==定义函数==:
skip():重复指定动作
drawClock():画表盘
drawPoint():画指针
getWeek():显示星期
getDate():显示日期
getRealtime():显示实时时间
main():主函数

运行效果如下:
在这里插入图片描述

打包exe

也可打包为exe,这样在没有编译环境的情况下也可以运行(发给你的小伙伴展示一下你的技术,岂不美哉)
效果如下(不会打包看我的博客pyinstaller打包exe详细教程
这里就不做演示了,直接上效果图

在这里插入图片描述
在这里插入图片描述
以上就是利用turtle库和datetime库制作实时钟表,如果觉得有帮助的话,三连支持一下,欢迎各位博主来访~
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。