Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python | 写了个钟&

Python | 写了个钟&

作者头像
LogicPanda
发布于 2018-08-30 03:45:31
发布于 2018-08-30 03:45:31
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

图文编辑:逻辑熊猫 图片来源:网络与截图 欢迎朋友圈各种姿势转发

一个软件的关键在于,你想用它做什么!

概述:

  • 显示时间的钟表
  • 使用pygame模块
  • 使用time、sys、math模块

一、展示

二、代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys, math, pygame
from pygame.locals import *
from datetime import datetime, date, time

def print_text(font, x, y, text, color = (255, 255, 255)):
    imgText = font.render(text, True, color)
    screen.blit(imgText, (x, y))

def wrap_angle(angle):
    return abs(angle % 360)

# main program begins
pygame.init()
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Analog Clock Demo")
font = pygame.font.Font(None, 24)
orange = 200, 180, 0
white = 255, 255, 255
yellow = 255, 255, 0
pink = 255, 100, 100

pos_x = 300
pos_y = 250
radius = 250
angle = 360

# repeating loop
while True :
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        screen.fill((0, 0, 100))
        sys.exit()

    # draw the clock numbers 1-12
    for n in range(1, 13):
        angle = math.radians(n * (360 / 12) - 90)
        x = math.cos(angle) * (radius - 20) - 10
        y = math.sin(angle) * (radius - 20) - 10
        print_text(font, pos_x + x, pos_y + y, str(n))

    # get the time of day
    today = datetime.today()
    hours = today.hour
    minutes = today.minute
    seconds = today.second

    # draw the hours hand
    hour_angle = wrap_angle(hours * (360 / 12) - 90)
    hour_angle = math.radians(hour_angle)
    hour_x = math.cos(hour_angle) * (radius - 80)
    hour_y = math.sin(hour_angle) * (radius - 80)
    target = (pos_x + hour_x, pos_y + hour_y)
    pygame.draw.line(screen, pink, (pos_x, pos_y), target, 25)

    # draw the minute hand
    min_angle = wrap_angle(minutes * (360 / 60) - 90)
    min_angle = math.radians(min_angle)
    min_x = math.cos(min_angle) * (radius - 60)
    min_y = math.sin(min_angle) * (radius - 60)
    target = (pos_x + min_x, pos_y + min_y)
    pygame.draw.line(screen, orange, (pos_x, pos_y), target, 12)
    
    # draw the second hand
    sec_angle = wrap_angle(seconds * (360 / 60) - 90)
    sec_angle = math.radians(sec_angle)
    sec_x = math.cos(sec_angle) * (radius - 40)
    sec_y = math.sin(sec_angle) * (radius - 40)
    target = (pos_x + sec_x, pos_y + sec_y)
    pygame.draw.line(screen, yellow, (pos_x, pos_y), target, 6)

    # cover the center
    pygame.draw.circle(screen, white, (pos_x, pos_y), radius, 6)
    pygame.draw.circle(screen, white, (pos_x, pos_y), 20)
    print_text(font, 0, 0, str(hours) + " : " + str(minutes) + " : " + str(seconds))
    
    pygame.display.update()
    screen.fill((0,0,0))

三、代码讲解

关于颜色:可在此处修改颜色信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
orange = 200, 180, 0
white = 255, 255, 255
yellow = 255, 255, 0
pink = 255, 100, 100

获取系统时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# get the time of day
    today = datetime.today()
    hours = today.hour
    minutes = today.minute
    seconds = today.second

定位指针

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# draw the hours hand
   hour_angle = wrap_angle(hours * (360 / 12) - 90)
   hour_angle = math.radians(hour_angle)
   hour_x = math.cos(hour_angle) * (radius - 80)
   hour_y = math.sin(hour_angle) * (radius - 80)
   target = (pos_x + hour_x, pos_y + hour_y)
   pygame.draw.line(screen, pink, (pos_x, pos_y), target, 25)

   # draw the minute hand
   min_angle = wrap_angle(minutes * (360 / 60) - 90)
   min_angle = math.radians(min_angle)
   min_x = math.cos(min_angle) * (radius - 60)
   min_y = math.sin(min_angle) * (radius - 60)
   target = (pos_x + min_x, pos_y + min_y)
   pygame.draw.line(screen, orange, (pos_x, pos_y), target, 12)
   
   # draw the second hand
   sec_angle = wrap_angle(seconds * (360 / 60) - 90)
   sec_angle = math.radians(sec_angle)
   sec_x = math.cos(sec_angle) * (radius - 40)
   sec_y = math.sin(sec_angle) * (radius - 40)
   target = (pos_x + sec_x, pos_y + sec_y)
   pygame.draw.line(screen, yellow, (pos_x, pos_y), target, 6)

四、笔者自述

这是一个模拟时钟软件。实现原理是利用time模块获取系统时间,然后利用pygame模块强大的图形处理能力,将时间变成钟表样式。这中间需要用到数学模块。

Pygame是一个为2D小游戏开发的模块,使用这个模块可以帮助开发者,快速,独立地开发具有可玩性的游戏。但是一个其用途并不局限于游戏开发,其优秀的图形图像,音频处理能力,让它可以适用于更多场合。

整体思路,建立一个画布,在上面画好一个时钟的轮轮廓。外边的大圆和圆心。之后画好时钟的指针(时针、分针、秒针),再利用math模块提供的数学函数,计算出指针旋转的角度。一个时钟就这样完成了。

五、结尾

功能简介:领域包括了「面向 Python 基础,进阶和有趣应用」的一站式技术分享,挖掘学习者在学习当中遇到的各类问题并分享经验,关注实用技能和有趣新闻,感兴趣的推荐关注。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 逻辑熊猫带你玩Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用 Python 动态模拟太阳系运转
提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫、发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了。
用户8544541
2022/01/27
6760
用 Python 动态模拟太阳系运转
Pygame基础10-物理模拟
一只大鸽子
2024/04/11
1630
Pygame基础10-物理模拟
150行Python代码模拟太阳系行星运转(含music)
版权声明:本文为CSDN博主「IT_change」的原创文章,遵循CC 4.0 BY-SA版权协议
荣仔_最靓的仔
2021/02/02
1.3K0
150行Python代码模拟太阳系行星运转(含music)
使用Python制作流星雨动画:浪漫的星空动效
夜晚的天空中,流星划过的一瞬间总是那么浪漫而梦幻。今天,我们将使用Python来制作一个动态的流星雨动画,让你的屏幕上也能展现出浪漫的星空动效。本文将带你一步步实现这一效果,并展示如何使用Pygame库进行动画制作。
屿小夏
2024/09/25
5920
【python游戏编程之旅】第一篇---初识pygame
本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。
马三小伙儿
2018/09/12
9920
【python游戏编程之旅】第一篇---初识pygame
用python写一个简单的贪吃蛇游戏(附代码)「建议收藏」
不知道有多少同学跟我一样,最初接触编程的动机就是为了自己做个游戏玩? 今天要给大家分享的是一个 pygame 写的“贪吃蛇”小游戏:
全栈程序员站长
2022/09/07
42.6K1
用python写一个简单的贪吃蛇游戏(附代码)「建议收藏」
【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。
马三小伙儿
2018/09/12
8750
【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
pygame 模拟导弹发送代码(上)
实现后,开始有了新的想法,想要模拟导弹发射出去的效果,有重力影响,可以调节角度和力度。
叶子陪你玩
2021/10/11
5810
用python画模拟时钟表盘
本篇文章通过使用简单的ascii字符在终端上画模拟时钟表盘,可以展示当前时间、天数、周数。
mariolu
2024/03/15
2872
Python模拟飞舞蝴蝶效果:创建飞舞蝴蝶动画
蝴蝶翩翩起舞的景象总是让人感到赏心悦目。在这篇博客中,我们将使用Python来创建一个飞舞蝴蝶的动画效果。通过利用Pygame库,我们可以实现一个逼真的蝴蝶飞舞动画。
屿小夏
2024/08/27
1760
Easy Games With Python and Pygame(二)- Pygame 绘制图形
pygame.draw可以用来绘制不同的形状,pygame.draw.cirle()可以用来绘制圆
RiemannHypothesis
2022/09/26
1.1K0
Easy Games With Python and Pygame(二)- Pygame 绘制图形
Python五子棋人机对战
了解过python的都知道python最高境界就是人工智能,AI技术,but但凡接触到AI那都感觉很高大上的,新手小白肯定看不懂… 别急,我给大家带来了一个伪AI技术,注释也写的很明白,保证小白都能一看就懂!!!! 唔,是的,伪AI技术,人机五子棋。(跟电脑下棋)实现一个人就可以跟电脑下棋。 具体怎么让电脑产生攻击力的… 代码的注释写的很清楚。 。。。
全栈程序员站长
2022/07/04
7290
Python制作动态齿轮:模拟机械齿轮旋转
机械齿轮的旋转不仅在工程和机械设计中至关重要,而且在动画和游戏开发中也经常被使用。在这篇博客中,我们将使用Python创建一个动态齿轮旋转的动画效果。通过利用Pygame库,我们可以实现一个逼真的机械齿轮旋转动画。
屿小夏
2024/08/27
2010
挑战任务: 画动态时钟
挑战题不会做也木有关系,但请务必在自行尝试后,再看下面的解答噢,不然...我也没办法( ̄▽ ̄)"
CodecWang
2021/12/07
9860
挑战任务: 画动态时钟
星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)
宇宙星空模拟器是一个用Python和Pygame库创建的小型项目,它可以模拟宇宙中的星星、星系和星云,并展现出美丽的星空效果。通过这个模拟器,你可以欣赏到宇宙中的无尽星辰,感受宇宙的浩瀚和神秘。
命运之光
2024/03/20
2030
星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)
Cozmo人工智能机器人SDK使用笔记(2)-显示部分face
这篇博文针对SDK教程中的第二部分cozmo_face进行简单介绍,如下: face是cozmo显示的核心部分: 来学习一下,如何操作吧~ 分为3个文件,如上图所示。 1. face image co
zhangrelay
2019/01/28
6590
python实战篇(四)---Python+OpenCV画动态时钟
虽寒冬已近,但,我们的心依旧温暖;python实战,我们一直在路上,请欣赏今天的实战内容,耐心点哦!
用户5410712
2022/06/01
6060
python实战篇(四)---Python+OpenCV画动态时钟
用Python模拟火山喷发:动态火山喷发效果
火山喷发是一种壮观而具有破坏力的自然现象。在这篇博客中,我们将使用Python创建一个动态的火山喷发模拟动画。通过利用Pygame库,我们可以实现一个视觉上引人入胜的火山喷发效果。
屿小夏
2024/08/27
1620
蓝桥ROS之f1tenth简单PID沿墙跑起来(Python)
在此案例前需完成: ☞ ​​​​​​蓝桥ROS之f1tenth案例学习与调试(成功) ---- 遥控肯定不过瘾,那么如何用一个PID程序使小车自动沿墙跑呢??? 公式如上…… 跑一跑看看? 阅读pdf文档: python程序模板: #!/usr/bin/env python from __future__ import print_function import sys import math import numpy as np #ROS Imports import rospy f
zhangrelay
2022/05/10
4140
蓝桥ROS之f1tenth简单PID沿墙跑起来(Python)
用Python实现可视化天气预报
我们用Python来做一个天气时钟。也就是既能显示时间,也能显示未来12小时天气。我们的产品设计效果如下图:
mariolu
2024/03/15
2470
推荐阅读
相关推荐
用 Python 动态模拟太阳系运转
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验