今天给大家分享 1 个非常实用的 python 技能——用 Python 做个能挂墙上的大钟表,先上成果视频:

本项目用到的库主要有 pygame 、 math 、 datetime 等,另外还用到一些数学知识,勾股定理搞不明白的朋友就不要往下看了,可能会头晕。

第一步:用 pygame 画个圆

1. 初始化画布参数

设置画布大小,添加标题,设置圆的原点、半径和角度:

pygame.init()

screen = pygame.display.set_mode((

600 , 500

))

pygame.display.set_caption(

"挂墙上的大钟表"

)

pos_x =

300 ; pos_y = 250

#原点坐标

radius = 200

#半径

angle = 360 #角度

2. 画 1 个黑色边框的圆 :

while True

:

screen.fill((

255 , 255 , 255 ))

# 画布底色为白色

for event in

pygame.event.get():

if

event.type== QUIT:

sys.exit()

keys = pygame.key.get_pressed()

if

keys[K_ESCAPE]:

sys.exit()

angle +=

1

if angle== 360

:

angle =

0

pygame.draw.circle(screen , ( 0 , 0 , 0 ) , ( int (pos_x) , int (pos_y)) , radius , 10

)

pygame.display.update()

第二步:在圆上添加数字和刻度

1. 添加数字

把圆周等分为 12 份,那么每份的角度为 360/12 ,因为 0 点在垂直方向,所以再减去 90 度,由勾股定理, x= 半径 *cos (角度), y= 半径 *sin( 角度 ) ,因此代码设置如下:

for n in range ( 1 , 13

):

angle = math.radians(n * (

360 / 12 ) - 90

)

x = math.cos(angle) * (radius-

30 )-

10

y = math.sin(angle) * (radius- 30 )-

10

print_text(font , pos_x+x , pos_y+y , str (n))

2. 添加刻度

原理同上,只不过把圆分成了 60 份

for n in range ( 1 , 61

):

angle = math.radians(n * (

360 / 60 ) - 90

)

x = math.cos(angle) * (radius-

15

)

y = math.sin(angle) * (radius-

15

)

if n% 5 == 0

:

print_text(pygame.font.Font(

None, 15 ) , pos_x+x , pos_y+y , str ( 0

))

else

:

print_text(pygame.font.Font(

None, 10 ) , pos_x + x , pos_y + y , str ( 0 ))

第三步:画时针、分针和秒针

1. 把当天的日期提取出来

我们需要用 python 的 datetime 库:

from datetime import

datetime

today = datetime.today()

print (today)

2020-04-1218:48:57.733000

再把月、日、时、分、秒提取出来:

month = today.month

day = today.day

hour = today.hour

minute = today.minute

second = today.second

2. 开始画线,让指针动起来

先在中间画个半径为 20 的小圆圈

pygame.draw.circle(screen , ( 220 , 220 , 220 ) , (pos_x , pos_y) , 20 , 6 )

再画时针,主要用到 pygame 的 draw.line 函数:

hour = int (today.time().hour)%

12

hour_angle = math.radians(hour*( 30 )- 90

)

hour_x = math.cos(hour_angle)*(radius-

80

)

hour_y = math.sin(hour_angle)*(radius-

80

)

hour_end = (pos_x+hour_x

,

pos_y+hour_y)

pygame.draw.line(screen

, ( 0 , 0 , 0 ) , ( int (pos_x) , int (pos_y)) , hour_end , 15 )

效果图:

分针和秒针的的划线原理同时针,区别在于长度和粗细,加上分针和秒针的图为:

第四步:添加日期和星期

先将日期转化为星期,主要用到 datetime 及 date 函数:

def get_week_day

():

from datetime import datetime ,

date

today =

str (datetime.today().date()).split( '-'

)

import

datetime

day = date.weekday(datetime.datetime(

int (today[ 0 ]) , int (today[ 1 ]) , int (today[ 2

])))

week_day_dict = {

0 : '星期一'

,

1 : '星期二'

,

2 : '星期三'

,

3 : '星期四'

,

4 : '星期五'

,

5 : '星期六'

,

6 : '星期日'

}

return week_day_dict[day]

调用该函数就会返回当天星期几

把当天的日期及星期加到钟表的合适位置:

print_text(pygame.font.Font( 'C:WindowsFontsAdobeHeitiStd-egular.otf' , 30 ) , 245 , 300 , str (today.date().month) + "月" + str (today.date().day) + "日"

)

print_text(pygame.font.Font(

'C:WindowsFontsAdobeHeitiStd-egular.otf' , 30 ) , 250 , 330 , get_week_day())

钟表最终效果如下:

第五步:把钟表挂在墙上

这时你需要准备一个显示器,然后连接你的电脑,把运行程序后显示的钟表投到显示器上,最后把显示器挂在墙上就 ok 了

源码获取私信小编01

python 做个创越火线挂_一日一技:用Python做个能挂墙上的大钟表相关推荐

  1. python中的断言是什么意思_一日一技:python中的断言

    一.使用python中的断言来自动检测python程序中的错误,让程序更加可靠且更易于调试 从根本上来说,python中的断言语句是一种调试工具,用来测试某个断言条件,如果断言条件为True,则程序将 ...

  2. python画钟表代码_Python技能操作5:用代码做个能挂墙上的大钟表

    天给大家分享 1 个非常实用的 python 技能--用 Python 做个能挂墙上的大钟表,先上成果视频: 本项目用到的库主要有 pygame . math . datetime 等,另外还用到一些 ...

  3. python模型预测结果 取整_一日一技:Python里面的//并不是做了除法以后取整

    一日一技:Python里面的//并不是做了除法以后取整 在Python 3里面,我们做除法的时候会遇到 a/b 和 a//b两种写法: >>> 10 / 3 3.3333333333 ...

  4. python线程监控配置文件_一日一技:Python多线程的事件监控

    一日一技:Python多线程的事件监控 设想这样一个场景: 你创建了10个子线程,每个子线程分别爬一个网站,一开始所有子线程都是阻塞等待.一旦某个事件发生:例如有人在网页上点了一个按钮,或者某人在命令 ...

  5. python并列排名_一日一技:Python实现有序列表并列排名

    一日一技:Python实现有序列表并列排名 现在有一个有序的列表: [75,78,80,89,89,92,93]需要对他们按成绩进行排名. 说到排名,一般大家会这样写: grade_list = [7 ...

  6. python变量下划线开头_一日一技:python中下划线在不同位置的作用

    在Python的变量名和方法名中,单下划线和双下划线都有各自的含义,有的仅仅是作为约定,用于提示开发人员,而有的则对Python解释器有特殊含义. 你可能有些疑惑,在Python中变量名和方法名中的单 ...

  7. python线程监控_一日一技:Python多线程的事件监控

    设想这样一个场景: 你创建了10个子线程,每个子线程分别爬一个网站,一开始所有子线程都是阻塞等待.一旦某个事件发生:例如有人在网页上点了一个按钮,或者某人在命令行输入了一个命令,10个爬虫同时开始工作 ...

  8. python3.6字典有序_一日一技:Python 3.6以后,字典有序

    从Python 3.6开始,字典的Key将会保留插入时候的顺序.例如: 在Python 3.6和以上的版本中,>>> a = {'hello': 'world', 'xyz': 'a ...

  9. python计时器timeit返回秒数_一日一技:Python中的timeit()方法

    timeit()方法 python中的timeit()方法, 它用于获取代码的执行时间.该库将代码语句运行一百万次,并提供从集合中花费的最短时间.这是一种有用的方法,有助于检查代码的性能. 语法如下: ...

最新文章

  1. linux下tomcat安装
  2. 【转】C#获取电脑客户端IP地址及当前用户名
  3. codematic2连接mysql失败_codematic2.rar
  4. 分布式与人工智能课程(part16)--深度学习
  5. [css] 写出几个初始化CSS的样式,并解释说明为什么要这样写
  6. AndroidStudio_安卓原生开发_自定义蒙板弹出框WaitDialog---Android原生开发工作笔记134
  7. 云存储软件行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. 谈谈JavaScript中function多重理解
  9. java开闭原则代码实现_如何提高你的代码设计能力?
  10. 全新的Kafka controller
  11. windows客户端连接linux服务器上的postmaster
  12. RHEL7CentOS7 精简操作指令
  13. MTK平台 后视镜系列 声控参数调整方法
  14. mysql 联合主键自增_mysql auto_increment 与 联合主键冲突问题
  15. 《娱乐至死》读书笔记(part2)--到处是水却没有一滴水可以喝
  16. java 枚举values()方法
  17. python与开源gis_GitHub - geodoer/GISandPython: 开源GIS与Python
  18. 基于粒子群算法的水电站中长期发电优化调度
  19. python interpolate_[转载]python插值
  20. p标签和超链接的认识

热门文章

  1. python与excel的差别-python数据分析相对于bi和excel的优势是什么?
  2. python官网下载哪个版本-python下载哪个版本好
  3. python绘制简单直方图-python plotly绘制直方图实例详解
  4. python游戏编程书籍-《Python游戏编程快速上手》一1.3 如何使用本书
  5. python编码规范手册-PEP8 Python 编码规范整理
  6. python运行慢-提高python运行速度的几个技巧
  7. python怎么读文件里的某一行-python读取txt文件并取其某一列数据的示例
  8. python用中文怎么说-震惊!!!python可以用中文写代码
  9. 川大计算机考研2020招生数,四川大学等大学,2020年研究生招生简章发布,这3个信息很重要!...
  10. feign框架设计与实现