iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python代码实现模拟动态指针时钟
  • 928
分享到

怎么用Python代码实现模拟动态指针时钟

Python 2023-05-19 20:05:34 928人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

一、python代码实现及turtle库简单介绍桌面时钟项目描述1、使用turtle库绘制时钟外形及表针;2、使用datetime获取系统时间;3、时钟动态显示turtle库基本命令1、turtle.setup()函数:用于启动一个图形窗口

一、python代码实现及turtle库简单介绍

桌面时钟项目描述

1、使用turtle库绘制时钟外形及表针;

2、使用datetime获取系统时间;

3、时钟动态显示

turtle库基本命令

1、turtle.setup()函数:用于启动一个图形窗口,它有四个参数turtle.setup(width, height, startx, starty)分别是:启动窗口的宽度和高度表示窗口启动时,窗口左上角在屏幕中的坐标位置。

2、turtle.pensize()函数:表示小乌龟运动轨迹的宽度。

小乌龟的运动轨迹颜色可以通过调用 turtle.pencolor() 函数来设置。该函数含有一个输入参数,我们可以将其设置为蓝色-blue,或使用其他颜色单词。Turtle采用RGB方式来定义颜色,如果希望获得和图片中颜色一致的小蛇,请输入turtle.pencolor(“#3B9909”)

小乌龟启动时的运动方向可以通过调用turtle.seth(angle)函数来设置。它包含一个输入参数,是角度值。方向可以用角度来表示:0度代表东方,90度代表北方,180度代表西方,270度代表南方;负值则表示相反的方向。我们让小乌龟以-40度的角度启动爬行,即向东南方向。

5、turtle.circle()函数:让小乌龟沿着一个圆形爬行,参数rad描述圆形轨迹半径的位置,这个半径在小乌龟运行的左侧,rad远位置处。当rad为负数时,半径位于小乌龟运行路径的右侧,参数angle表示小乌龟在圆形轨迹上爬行的弧度。

6、turtle.fd()函数:表示乌龟向前直线爬行移动表示小乌龟向前直线爬行移动,它有一个参数表示爬行的距离

datetime模块函数

1.datetime.date:表示日期的类,返回year-month-day

2.datetime.datetime:表示日期时间的类,返回年月日,时分秒

3.datetime.time:表示时间的类,

4.datetime.timedelta:表示时间间隔,即两个时间点的间隔

5.datetime.tzinfo:时区的相关信息

python代码示例

import turtle                 # 导入绘图海龟模块
import datetime               # 导入日期时间模块

# 移动一段距离
def skip(distance):          # 移动方法,不留移动痕迹
    turtle.penup()           # 抬笔不绘制
    turtle.forward(distance) # 移动指定距离
    turtle.pendown()         # 落笔移动绘制

def draw_clock_dial():            # 绘制表盘的方法
    turtle.reset()           # 删除图形归位
    turtle.hideturtle()       # 隐藏箭头
    for i in range(60):       # 循环执行60次,一圈为360度所以每一秒的角度为6度
        skip(160)              # 移动160,相当于表盘圆的半径
        # 每5秒绘制一个小时刻度
        if i % 5 == 0:
            turtle.pensize(7)       # 刻度大小
            # 画时钟
            turtle.forward(20)       # 小时刻度的长度为20
            skip(-20)      # 复原小时刻度的位置
        else:
            turtle.pensize(1)      # 将画笔大小设置为1
            turtle.dot()           # 绘制分钟刻度的小圆点
        skip(-160)                 # 回到中心位置
        turtle.right(6)            # 向右旋转6度


def get_week(t):                   # 获取星期的方法
    week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
    return week[t.weekday()]       # 返回当天的星期


def create_pointer(length, name):     # 创建指针方法
    turtle.reset()                 # 删除图形归位
    skip(-length * 0.1)            # 抬笔移动指定距离
    turtle.begin_poly()            # 记录多边形
    turtle.forward(length * 1.1)   # 绘制指定长度的指针
    turtle.end_poly()              # 停止记录多边形
    # 注册多边形状
    turtle.reGISter_shape(name, turtle.get_poly())

def init_pointer():                # 初始化指针
    global secHand, minHand, hurHand, printer
    turtle.mode("loGo")              # 重置Turtle指向上
    create_pointer(135,"secHand")       # 创建秒针图形
    create_pointer(110,"minHand")       # 创建分针图形
    create_pointer(90,"hurHand")        # 创建时针图形
    secHand = turtle.Turtle()        # 创建秒针turtle对象
    secHand.shape("secHand")         # 创建指定秒针名称的形状
    minHand = turtle.Turtle()        # 创建分针turtle对象
    minHand.shape("minHand")         # 创建指定分针名称的形状
    hurHand = turtle.Turtle()        # 创建时针turtle对象
    hurHand.shape("hurHand")         # 创建指定时针名称的形状
    for hand in secHand, minHand, hurHand:   # 循环遍历三个指针
        hand.shapesize(1, 1, 5)              # 设置形状拉伸大小和轮廓线
        hand.speed(0)                        # 设置速度为最快
    printer = turtle.Turtle()                # 创建绘制文字的Turtle对象
    printer.hideturtle()                     # 隐藏箭头
    printer.penup()                          # 抬笔

def move_pointer():                          # 移动指针的方法
    # 不停的获取时间
    t = datetime.datetime.today()
    second = t.second + t.microsecond * 0.000001    # 计算移动的秒
    minute = t.minute + second/60                   # 计算移动的分
    hour = t.hour + minute/60                       # 计算移动的小时
    secHand.setheading(6*second)                     # 设置秒针的角度
    minHand.setheading(6*minute)                     # 设置分针的角度
    hurHand.setheading(30*hour)                      # 设置时针的角度
    turtle.tracer(False)                             # 关闭绘画效果
    printer.forward(65)                              # 向上移动65
    # 绘制星期
    printer.write(get_week(t), align="center",font=("Courier", 14, "bold"))
    printer.back(130)                                # 倒退130
    # 绘制年月日
    printer.write(t.strftime('%Y-%m-%d'), align="center",font=("Courier", 14, "bold"))
    printer.home()                                   # 归位
    turtle.tracer(True)                              # 开启绘画效果
    turtle.ontimer(move_pointer, 10)                 # 10毫秒后调用move_pointer()方法

if __name__ == '__main__':
    turtle.setup(450, 450)      # 创建窗体大小
    init_pointer()              # 调用初始化指针的方法
    turtle.tracer(False)        # 关闭绘画效果
    draw_clock_dial()            # 绘制表盘
    move_pointer()               # 调用移动指针的方法
    turtle.mainloop()            # 不关闭窗体

运行结果:

怎么用Python代码实现模拟动态指针时钟

二、MFC代码实现

表盘图大家可以自己找一个,添加到位图资源里就行。

怎么用Python代码实现模拟动态指针时钟

添加了一个定时器,实现指针转动更新

怎么用Python代码实现模拟动态指针时钟

时针、分针、秒针的计算公式:

首先换算成12小时制,h = h % 12

时针每小时相当于于相对于y轴顺时针30度。每分钟0.5度(秒可以忽略)

分针每分钟是6度,秒是0.1度

秒针每秒也是6度。

定义分针秒针时针的长度,按照秒针最长,时针次之,时针最短自己定义下。

然后有了指针的夹角,和长度,就可以得到指针末端的坐标,从时钟中心用LineTo方法画线即可。

MFC代码示例

void CdrawdateDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	UpdateData(TRUE);
	CTime time = CTime::GetCurrentTime();                //获得系统时间
	m_Sec = time.GetSecond();
	m_Min = time.GetMinute();
	m_Hour = time.GetHour();

	CDC* pDC = GetDC();
	CRect rect;
	GetClientRect(&rect);                                //获取客户区域
	CBitmap bitmap;                                      //定义图片类
	bitmap.LoadBitmap(IDB_BITMAP2);                      //加载位图
	CDC memdc;                                           //定义临时画布
	memdc.CreateCompatibleDC(pDC);                       //创建画布
	memdc.SelectObject(&bitmap);                         //关联图片

	int x = rect.Width() / 2;
	int y = rect.Height() / 2;

	//memdc.DrawText(weekDay(time), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);		// 显示星期
	CString csCurrTime;
	csCurrTime.FORMat("%04d-%02d-%02d                        %s", time.GetYear(), time.GetMonth(), time.GetDay(), weekDay(time));
	memdc.DrawText(csCurrTime, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);		// 显示当前日期

	CPen MinutePen(PS_SOLID, 5, RGB(0, 0, 0));               //设置分针画笔
	memdc.SelectObject(&MinutePen);
	memdc.MoveTo(x, y);
	//绘制分针
	memdc.LineTo(x + (long)100 * cos(PI / 2 - 2 * PI*m_Min / 60.0), y - (long)100 * sin(PI / 2 - 2 * PI*m_Min / 60.0));
	CPen HourPen(PS_SOLID, 8, RGB(0, 0, 0));                 //设置时针画笔
	memdc.SelectObject(&HourPen);
	memdc.MoveTo(x, y);
	//绘制时针
	memdc.LineTo(x + (long)60 * cos(PI / 2 - 2 * PI*(5 * m_Hour / 60.0 + m_Min / 12.0 / 60.0))
		, y - (long)60 * sin(PI / 2 - 2 * PI*(5 * m_Hour / 60.0 + m_Min / 12.0 / 60.0)));
	CPen SecondPen(PS_SOLID, 2, RGB(255, 0, 0));            //设置秒针画笔
	memdc.SelectObject(&SecondPen);
	memdc.MoveTo(x, y);
	memdc.LineTo(x + (long)140 * cos(PI / 2 - 2 * PI*m_Sec / 60.0), y - (long)140 * sin(PI / 2 - 2 * PI*m_Sec / 60.0));//绘制秒针
	memdc.MoveTo(x, y);
	memdc.LineTo(x + (long)10 * cos(PI / 2 - 2 * PI*(m_Sec + 30) / 60.0), y - (long)10 * sin(PI / 2 - 2 * PI*(m_Sec + 30) / 60.0));//绘制秒针
	SecondPen.DeleteObject();
	MinutePen.DeleteObject();
	HourPen.DeleteObject();
	pDC->BitBlt(0, 0, rect.right, rect.bottom, &memdc, 0, 0, SRCCOPY);                    //复制图片
	memdc.DeleteDC();                                   //复制临时画布到预览窗口
	bitmap.DeleteObject();                              //删除图片
	ReleaseDC(pDC);

	CDialogEx::OnTimer(nIDEvent);
}

输出cstring(判断今天星期几)

CString CdrawdateDlg::weekDay(CTime oTime)
{
	CString str;
	int nDayOfWeek = oTime.GetDayOfWeek();
	switch (nDayOfWeek)
	{
	case 1:
		str = "星期日";
		break;
	case 2:
		str = "星期一";
		break;
	case 3:
		str = "星期二";
		break;
	case 4:
		str = "星期三";
		break;
	case 5:
		str = "星期四";
		break;
	case 6:
		str = "星期五";
		break;
	case 7:
		str = "星期六";
		break;
	}
	return str;
}

以上就是怎么用Python代码实现模拟动态指针时钟的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 怎么用Python代码实现模拟动态指针时钟

本文链接: https://www.lsjlt.com/news/213775.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Python代码实现模拟动态指针时钟
    一、python代码实现及turtle库简单介绍桌面时钟项目描述1、使用turtle库绘制时钟外形及表针;2、使用datetime获取系统时间;3、时钟动态显示turtle库基本命令1、turtle.setup()函数:用于启动一个图形窗口...
    99+
    2023-05-19
    Python
  • 利用Python代码实现模拟动态指针时钟
    目录一、python代码实现及turtle库简单介绍二、MFC代码实现一、python代码实现及turtle库简单介绍 桌面时钟项目描述 1、使用turtle库绘制时钟外形及表针; ...
    99+
    2023-05-15
    Python模拟动态指针时钟 Python动态指针时钟 Python 时钟
  • jquery模拟LCD时钟的html代码怎么写
    这篇“jquery模拟LCD时钟的html代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2024-04-02
  • java实现时钟代码怎么写
    以下是一个简单的Java代码示例,用于实现一个时钟:```javaimport java.time.LocalTime;import...
    99+
    2023-08-29
    java
  • Python中怎么用pyqt5制作指针钟表显示时间
    这篇文章主要介绍“Python中怎么用pyqt5制作指针钟表显示时间”,在日常操作中,相信很多人在Python中怎么用pyqt5制作指针钟表显示时间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中...
    99+
    2023-06-29
  • JavaScript实现拖动模态框的代码怎么写
    这篇文章主要介绍“JavaScript实现拖动模态框的代码怎么写”,在日常操作中,相信很多人在JavaScript实现拖动模态框的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript实...
    99+
    2023-07-02
  • golang运行时动态生成代码怎么实现
    在Go语言中,可以使用`go/ast`和`go/printer`包来实现动态生成代码。 首先,你需要使用`go/ast`包来创建一棵...
    99+
    2023-10-26
    golang
  • Java动态代理模式怎么实现
    这篇文章主要介绍“Java动态代理模式怎么实现”,在日常操作中,相信很多人在Java动态代理模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java动态代理模式怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • golang动态执行代码怎么实现
    在Go语言中,可以使用reflect包来实现动态执行代码。下面是一个简单的示例: package main import ( ...
    99+
    2023-10-26
    golang
  • 基于Python实现模拟三体运动的示例代码
    目录拉格朗日方程推导方程组微分方程算法化求解+画图动图绘制温馨提示,只想看图的画直接跳到最后一节 拉格朗日方程 此前所做的一切三体和太阳系的动画,都是基于牛顿力学的,而且直接对微分进...
    99+
    2023-03-10
    Python模拟三体运动 Python三体运动 Python三体
  • C语言怎么模拟实现动态通讯录
    本篇内容主要讲解“C语言怎么模拟实现动态通讯录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么模拟实现动态通讯录”吧!目录模拟实现通讯录总体架构一览图文件执行任务分模块实现 测...
    99+
    2023-06-20
  • C++中怎么用Clock类模拟实现闹钟运行
    今天小编给大家分享一下C++中怎么用Clock类模拟实现闹钟运行的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。定义一个时钟类...
    99+
    2023-06-29
  • Java中怎么实现静动态代理模式
    这篇文章将为大家详细讲解有关Java中怎么实现静动态代理模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.静态代理模式 使用场合:为其他对象提供一种代理以控制对这个对象的访问。在某些情况...
    99+
    2023-06-17
  • 如何用代码实现Python动态加载依赖
    今天就跟大家聊聊有关如何用代码实现Python动态加载依赖,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前几天在一个开源项目里遇到好多用户反馈,不会安装依赖,或者执行 pip ins...
    99+
    2023-06-22
  • Python怎么用requests模块实现动态网页爬虫
    小编给大家分享一下Python怎么用requests模块实现动态网页爬虫,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发工具Python版本: 3.6.4相关模块:urllib模块;random模块;requests模块...
    99+
    2023-06-29
  • SpringBoot怎么实现启动时自动执行代码
    这篇文章主要介绍了SpringBoot怎么实现启动时自动执行代码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么实现启动时自动执行代码文章都会有所收获,下面我们一起来看看吧。前言目前开发的...
    99+
    2023-06-29
  • 使用Java怎么实现静态代理和动态代理
    本篇文章为大家展示了使用Java怎么实现静态代理和动态代理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代理模式代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。主要解决:在直接...
    99+
    2023-06-14
  • 怎么在Python下使用Pygame实现时钟效果
    这篇文章主要讲解了“怎么在Python下使用Pygame实现时钟效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python下使用Pygame实现时钟效果”吧!本文实例为大家分享了P...
    99+
    2023-06-20
  • 怎么使用js实现拖动模态框
    本文小编为大家详细介绍“怎么使用js实现拖动模态框”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用js实现拖动模态框”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果如下:代码思路:1.点击弹出层,会弹出...
    99+
    2023-07-02
  • CSS3怎么实现多背景模拟动态边框的效果
    这篇文章给大家分享的是有关CSS3怎么实现多背景模拟动态边框的效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先来看看要实现的效果图实现方法如下我首先想到的是border属性...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作