python电子时钟小程序_第一个python小程序——即时动态时钟(代码解读)

代码资源来自:

一、完整代码:

#coding=UTF-8

from turtle import *

from datetime import *

def Skip(step): #建立表的外框

penup()

forward(step)

pendown()def mkHand(name,length): #注册turtle形状,建立表针turtle

reset()

Skip(-length*0.1)

begin_poly()

forward(length*1.1)

end_poly()

handForm=get_poly()

register_shape(name,handForm)defInit():globalsecHand,minHand,hurHand,printer

mode("logo") #重置turtle指向北

mkHand("secHand",125) #建立三个表针并初始化

mkHand("minHand",130)

mkHand("hurHand",90)

secHand=Turtle()

secHand.shape("secHand")

minHand=Turtle()

minHand.shape("minHand")

hurHand=Turtle()

hurHand.shape("hurHand")for hand insecHand,minHand,hurHand:

hand.shapesize(1,1,3)

hand.speed(0)

printer= Turtle() #建立输出文字turtle

printer.hideturtle()

printer.penup()def SetupClock(radius): #建立表外框

reset()

pensize(7)for i in range(60):

Skip(radius)if i % 5 ==0:

forward(20)

Skip(-radius-20)else:

dot(5)

Skip(-radius)

right(6)defWeek(t):

week= ["Mon", "Tues", "Wed","Thur", "Fri", "Sat", "Sun"]returnweek[t.weekday()]defDate(t):

y=t.year

m=t.month

d=t.dayreturn "%s %d %d" %(y, m, d)defTick():

t=datetime.today()

second= t.second + t.microsecond * 0.000001minute= t.minute + second/60.0hour= t.hour + minute/60.0secHand.setheading(6*second)

minHand.setheading(6*minute)

hurHand.setheading(30*hour)

tracer(False)

printer.forward(65)

printer.write(Week(t),align="center",font=("Courier",14,"bold"))

printer.back(130)

printer.write(Date(t),align="center",font=("Courier",14,"bold"))

printer.home()

tracer(True)

ontimer(Tick,100) #100ms后继续调用tick

defmain():

tracer(False)

Init()

SetupClock(160)

tracer(True)

Tick()

mainloop()if __name__ == "__main__":

main()

二、运行结果截图

753619-20181029215102286-1803955228.png

三、程序解读

1、思路

需求:5个Turtle对象, 1个绘制外表盘+1个输出文字++3个模拟表上针

Step1:建立5个Turtle对象并初始化 (表盘绘制和文本输出对象是turtle常见的对象方式;turtle的外观shape就是指针形状,在每一时刻以轴心为圆心旋转了一定角度)

Step2:静态表盘绘制

Step3:根据时钟更新表针位置与时间信息

基本库:Turtle、datetime

2、代码

(1)fromturtle import *

Turtle库——Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟(画笔),在一个横轴为x、纵轴为y的坐标系(画布),根据一组函数指令的控制,在平面坐标系中移动,从而在它爬行的路径上绘制了图形。

操纵海龟绘图有3种命令:

运动命令

6ceb134abab2d6de78f953ff9dfbb10b775.png

画笔控制命令

66e3a3901b1d965a23aec12797557c36e08.png

全局控制命令

917a21bf082046d680c410718c98273a312.png

还有其他命令

11f6ec0a25a771c0905d1177012534fd3fc.png

(2)from datetime import *

datetime模块重新封装了time模块,提供了更多处理日期和时间的接口。包含以下几个类和两个常量:

753619-20181030202909771-668396757.png

6a841f838041def0672a6b9063d039293ed.png

每个类中定义了很多属性和方法,包括对时间的调用及格式转换等问题在此不再赘述。

(3)几个重要的函数 (代码中的函数写成mode(),而不用写成turtle.mode(),是因为turtle是python的标准库,在python项目里不会提示“unresolved reference ‘xxx’”,但在解释器为python2.7的python文件中不会有提示。此提示不影响代码运行)

SetupClock(radius): 绘制表盘,表盘半径radius为参数

设置画笔大小,通过60次循环绘制刻度,每5个刻度为短线段,其余为小圆点。

Skip(step): 由于表盘刻度不连续,需频繁抬起画笔,放下画笔

mkHand(name,length): 定义指针几何形状。

使用两个函数begin_poly() 、end_poly()记录多边形形状,register_shape函数将handForm几何形状注册为合法的turtle外形.

Init(): 初始化表针和文本对象

Tick(): 绘制表针的动态显示

获取当前的时分秒,设置每个指针转动的角度,绘制星期与日期文本,每隔100ms调用此函数更新时间

tracer(False) : 实现绘制的效果同时出现,用tracer函数控制刷新,false时动画关闭,绘制结束后一致刷新;true时恢复动画的绘制效果

mainloop(): 启动事件循环 -调用Tkinter的mainloop函数。必须是乌龟图形程序中的最后一个语句。

the end.......

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 python 项目神奇时钟代码_micropython 学习笔记之 RTC 时钟模块(DS3231)。 首先,我们需要导入相应的模块: ```python from machine import Pin, I2C import utime ``` 然后,我们需要设置 I2C 总线和 RTC 模块的地址: ```python i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000) rtc_addr = 0x68 ``` 接下来,我们需要定义几个函数来读取和设置 RTC 模块的时间: ```python def bcd2dec(bcd): return (bcd>>4)*10 + (bcd & 0x0f) def dec2bcd(dec): return ((dec//10)<<4) + (dec%10) def get_time(): time = i2c.readfrom_mem(rtc_addr, 0x00, 7) year = bcd2dec(time[6])+2000 month = bcd2dec(time[5]) date = bcd2dec(time[4]) day = bcd2dec(time[3]) hour = bcd2dec(time[2]) minute = bcd2dec(time[1]) second = bcd2dec(time[0]) return year, month, date, day, hour, minute, second def set_time(year, month, date, day, hour, minute, second): i2c.writeto_mem(rtc_addr, 0x00, bytes([dec2bcd(second), dec2bcd(minute), dec2bcd(hour), dec2bcd(day), dec2bcd(date), dec2bcd(month), dec2bcd(year-2000)])) ``` 这些函数分别用于将 BCD 码转换为十进制数、将十进制数转换为 BCD 码、读取当前时间和设置时间。 最后,我们可以写一个循环来不断显示当前时间: ```python while True: year, month, date, day, hour, minute, second = get_time() print("%d-%02d-%02d %02d:%02d:%02d %d" % (year, month, date, hour, minute, second, day)) utime.sleep(1) ``` 这里我们使用了 MicroPython 的时间模块 `utime` 来实现延时功能,每秒钟刷新一次时间。 这就是 python 项目神奇时钟代码_micropython 学习笔记之 RTC 时钟模块(DS3231)的全部内容,希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值