python小项目——时钟模拟

钟表是一种计时的装置,也是计量和指示时间的精密仪器。钟表的样式千变万化,但是用来显示时间的表盘相差无几,大多数钟表表盘的样式由刻度(共60个,围成圆形)、指针(时针、分针和秒针)、周日期显示和日期显示组成。

图列:

在这里插入图片描述


实现时钟模拟:

使用python内置模块:

# 导入包
import turtle as tl
from datetime import *

1. 将画笔移动到指定的距离

def skip(step):
    """
    将画笔移动到指定的距离
    :param step:画笔移动的长度
    :return:无返回值
    """
    tl.penup()         # 抬起画笔
    tl.forward(step)   # 移动画笔
    tl.pendown()       # 落下画笔

2. 绘制钟表刻度

def setip_clock(radius):
    '''
    建立钟表的外框
    :param radius:
    :return:
    '''
    tl.reset()          # 重置turtle绘图环境到初始状态(清空画布)
    tl.pensize(7)       # 设置画笔线条的粗细
    for i in range(60):
        skip(radius)    # 在距离圆形为r的位置落笔
        if i %5==0:     # 若能整除5,则画一条短直线
            tl.forward(20)   # 正方向画20像素
            skip(-radius-20) # 反方向画20像素
        else:
            tl.dot(5)   #绘制一个圆心点(直径为5)
            skip(-radius)
        tl.right(6)

3. 注册turtle形状,建立名字为name的形状

def make_hand(name,length):
    '''
    注册turtle形状,建立名字为name的形状
    :param name:指针名称
    :param length:指针长度
    :return:
    '''
    tl.reset()
    skip(-0.1*length)
    # 开始记录多边形的顶点
    tl.begin_poly()
    tl.forward(1.1*length)
    # 停止记录多边形的顶点,并与第一个顶点相连
    tl.end_poly()
    # 返回最后记录的多边形
    handForm=tl.get_poly()
    # 注册形状,命名为name
    tl.register_shape(name,handForm)

4. 程序初始化设置,包括绘制三个表针,日期显示和周日

def init():
    # 设置全局变量
    global secHand,minHand,hurHand,printer
    # 重置turtle指针向北
    tl.mode("logo")
    # 建立三个表针Turtle并初始化
    secHand=tl.Turtle()
    make_hand("secHand",125) # 秒针
    secHand.shape("secHand")
    minHand=tl.Turtle()
    make_hand("minHand",130) #分针
    minHand.shape("minHand")
    hurHand=tl.Turtle()
    make_hand("hurHand",90) # 时针
    hurHand.shape("hurHand")
    for hand in secHand,minHand,hurHand:
        hand.shapesize(1,1,3) # 调整三根指针的粗细
        hand.speed(0)         # 设置移动速度

    # 建立并输出文字的turtrl
    printer=tl.Turtle()
    printer.hideturtle()
    printer.penup()

5. 以指定的格式返回周日日期

def week(d):
    week=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
    return week[d.weekday()]

6. 以指定的格式返回日期

def day(d):
    return "%s %d %d" %(d.year,d.month,d.day)

7. 实现钟表动态设置


def tick():
    """
    绘制钟表的动态显示
    :return:
    """
    # 获取本地时间,使用类成员
    d=datetime.today()
    second=d.second+d.microsecond*0.000001
    minute=d.minute+d.second/60.0
    hour=d.hour+d.minute/60.0

    # 将画笔的方向设置为to_angle参数
    secHand.setheading(second*6)
    minHand.setheading(minute*6)
    hurHand.setheading(hour*30)
    tl.tracer(False)
    printer.fd(70)  # 向前移动指定的距离

    # 根据对齐(”左“,”中“,”右“)和给的那个字体,在当前龟位置写入文本
    printer.write(week(d),align="center",font=("Courier",14,"bold"))
    printer.back(130)
    printer.write(day(d),align="center",font=("Courier",14,"bold"))

    # 将位置和方向恢复到初始状态,位置初始坐标位(0,0)
    # 方向初始位:”standard“ 模式为right向右即东,
    # logo 模式是up向上即北
    printer.home()
    tl.tracer(True)
    tl.ontimer(tick,100)  # 计时器,100ms后继续调用tick

8. 主函数

def main():
    # 关闭绘画追踪,可以用于加速绘画复杂图形
    tl.tracer(False)
    init()
    # 画表框
    setip_clock(200)
    # 开启动画
    tl.tracer(True)
    tick()
    # 启动时间循环,开始接收鼠标的和键盘的操作
    tl.done()
    
# 测试
if __name__ == '__main__':
    main()

图形化界面:

在这里插入图片描述


想了解模块的导入可看:python异常的捕捉与包
想了解turtle包可看:Python 常用内置库 time库、random库、turtle库
欢迎大家观看本期作品,希望本期作品可以帮助大家!
无论是学习还生活都是带着星星的(希望的星✨),大家一起加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/513251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 11是如何封装Thread库的?

引言 C11 标准引入了一个重要的特性,即原生线程支持,这标志着C语言在并发编程领域迈出了坚实的步伐。在此之前,开发人员在进行跨平台的多线程编程时,不得不依赖于操作系统提供的特定API,如Windows API或POSIX Threads…

RuoYi-Vue若依框架-集成mybatis-plus报错Unknown column ‘search_value‘ in ‘field list‘

报错信息 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column search_value in field list ### The error may exist in com/ruoyi/sales/mapper/ZcSpecificationsMapper.java (best guess) ### The error may involve defaultParameter…

【图像分割】nnUnetV1与V2的Linux部署与应用命令

以前觉得麻烦,一直没用过nnunet,虽然知道它很火,最近一个契机,部署使用了一下nnunet,记录一下其部署和使用的方法与命令。 1、部署 首先,我有一个环境,这个环境可以是以前就有的,也可…

常州小程序案例分享:行业领军企业的数字化转型之路

随着信息技术的快速发展,数字化转型已成为各行各业企业提升竞争力、适应市场变革的关键战略。在江苏省常州市,一些行业领军企业凭借敏锐的市场洞察力和前瞻性的创新思维,成功借助小程序这一轻量化应用平台,实现了业务流程优化、用…

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查?

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查? 一、节点健康检查1、使用 kubectl 查看节点状态2、查看节点详细信息3、检查节点资源使用情况 2、Pod 健康检查2.1、 使用 kubectl 查看 Pod 状态2.2、 查看特定 Pod 的详细信息…

基于Springboot+vue的宠物服务管理系统+论文文档

基于Springbootvue的宠物服务管理系统论文文档 预览 简介 本系统共分为三个角色:管理员、用户: 管理员:管理员管理、密码修改、用户管理、充值管理、商品分类管理、商品信息管理、订单信息管理、分享趣事管理、医疗服务管理、服务预约管理…

力扣刷题Days32-92. 反转链表 II(js)

1,题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 2&#xff0c;代码 一次遍历「穿针引线」反转链表&#xff08;头插法&#xff09; /*** Defi…

LeetCode 96. 不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1提…

【蓝桥杯嵌入式】六、真题演练(一)-1演练篇:第 14 届真题

温馨提示&#xff1a; 真题演练分为模拟篇和研究篇。本专栏的主要作用是记录我的备赛过程&#xff0c;我打算先自己做一遍&#xff0c;把遇到的问题和不同之处记录到演练篇&#xff0c;然后再返回来仔细研究一下&#xff0c;找到最佳的解题方法记录到研究篇。 目录 解题记录&…

2023年EI会议论文已见刊/检索进展汇总

2023年录用的会议论文已在SPIE、ACM、IEEE等出版社正式上线见刊&#xff0c;并已陆续完成EI Compendex数据库收录&#xff0c;详情如下&#xff1a; EIECT 2023——IEEE出版&#xff0c;并完成EI收录 会议信息&#xff1a; 第三届电子信息工程与计算机技术国际学术会议&…

MapReduce [OSDI‘04] 论文阅读笔记

原论文&#xff1a;MapReduce: Simplified Data Processing on Large Clusters (OSDI’04) 1. Map and Reduce Map&#xff1a;处理键值对&#xff0c;生成一组中间键值对Reduce&#xff1a;合并与同一中间键相关的所有中间值process overview&#xff1a;分割输入数据&#x…

EF数据持久化(三层架构,公司查,改)

效果图 Model设置具体流程在下面链接中 https://blog.csdn.net/Mr_wangzu/article/details/136805824?spm1001.2014.3001.5501 DAL using System; using System.Collections.Generic; using System.Linq; using System.Web; using WebApplication2.Models; namespace WebAppli…

力扣由浅至深 每日一题.20 环形链表

山穷水尽&#xff0c;柳暗花明 —— 24.4.3 环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

实战webSocket压测(一)webSocket背景

一、什么是webSocket&#xff1f; WebSocket是一种在单个TCP连接上进行全双工通信的协议。它允许在客户端&#xff08;如Web浏览器&#xff09;和服务器之间建立持久的连接&#xff0c;实现全双工通信。 二、WebSocket出现的背景 1、http协议背景&#xff1a; 以B/S架构为例…

【数据结构】学会了波兰表达式与逆波兰表达式,怎么能允许自己不会通过计算机进行表达式转换呢?

栈在表达式转换中的应用 导读一、中缀表达式二、表达式的组成部分2.1 单一运算符2.2 不带括号的混合运算符2.3 带括号的混合运算符 三、表达式改写3.1 问题分析3.2 算法设计3.3 算法实现3.4 算法测试 结语 导读 大家好&#xff01;很高兴又和大家见面啦&#xff01;&#xff0…

moveit中RM65-B适配拓展轴一体规划

Moveit适配拓展轴 1.概述 睿尔曼关节模组和机械臂连接时可以被自动识别&#xff0c;并且睿尔曼机械臂提供同时控制机械臂和拓展关节模组的通信协议&#xff08;限一个拓展关节&#xff09;。因此&#xff0c;用户可以在RM机械臂的基础上添加外部关节&#xff0c;构建新的机器…

顶级Layer-3 通证正在飙升,布局龙头Degen Chain(含bitget教程)

近期以太坊生态内&#xff0c;Base 一枝独秀&#xff0c;其 TVL 突破 25 亿美元&#xff0c;创历史新高。并且生态内的社交文化和 DeFi 板块的龙头都很惹眼。 Farcaster 协议上的 meme 币 DEGEN 目前价格为 0.018 美元&#xff0c;7 日涨幅达 376%。 DEGEN 兴起于 Farcaster 的…

备考2024年思维100春季线上比赛?来做做官方模拟题(附答案)

2024年春季思维100活动第一阶段线上比赛&#xff08;4月20日&#xff0c;星期六&#xff0c;上午&#xff09;的报名正在进行中&#xff0c;报名时间截止到为4月6日&#xff08;本周六&#xff09;&#xff0c;请设置好闹钟提醒以免错过。更多安排和需要提前了解的关键点可以见…

制作一个一键运行的10多M的go-cqhttp最简docker镜像

一直有个想自己部署一个QQ机器人&#xff0c;虽然成功完成在Windows环境下基于 go-cqhttp 的搭建工作。但考虑到我有一台常年在线的群晖 NAS&#xff0c;并且已经配置并启用了 Docke r服务&#xff0c;可否将go-cqhttp 迁移至 NAS 上的 Docker 容器中运行吗呢&#xff1f;同时&…

rasa trian 报错解决---Project validation completed with errors.

rasa train 过程中&#xff1a;出现一下问题&#xff1b; Project validation completed with errors. 解决措施:python 3.10版本&#xff0c;rasa 3.6.19, 降低版本 pip3 install rasa3.5.17 -i https://pypi.tuna.tsinghua.edu.cn/simple成功解决