基于Python制作三款起床闹钟的示例代码

目录

  • 导语
  • 一、Turtle绘制时钟
    • 1)代码展示
    • 2)效果展示
  • 二、Turtle实现模拟时钟
    • 1)代码展示
    • 2)效果展示
  • 三、简易时钟
    • 1)代码展示
    • 2)效果展示

导语 叮叮叮,我们要按时长大
我是你们的木子同学!当当当当——隆重出场,撒花撒花~
【基于Python制作三款起床闹钟的示例代码】嗨!大家有没有生物钟不准时的时候,是不是每到休息日或者长假就会经常要倒时差?
每天上班最痛苦的事情就是早起早起早起!这是大部分上班族的痛苦,但是不上班又是不可能的啦,因为都是为了搞钱
今天小编就用代码示例化,给大家展示一下不同的时钟,希望大家按时上班,按时搞钱啦

一、Turtle绘制时钟


1)代码展示
import turtlefrom datetime import * # 抬起画笔,向前运动一段距离放下def Skip(step):turtle.penup()turtle.forward(step)turtle.pendown() def mkHand(name, length):# 注册Turtle形状,建立表针Turtleturtle.reset()Skip(-length * 0.1)# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。turtle.begin_poly()turtle.forward(length * 1.1)# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。turtle.end_poly()# 返回最后记录的多边形。handForm = turtle.get_poly()turtle.register_shape(name, handForm) def Init():global secHand, minHand, hurHand, printer# 重置Turtle指向北turtle.mode("logo")# 建立三个表针Turtle并初始化mkHand("secHand", 135)mkHand("minHand", 125)mkHand("hurHand", 90)secHand = turtle.Turtle()secHand.shape("secHand")minHand = turtle.Turtle()minHand.shape("minHand")hurHand = turtle.Turtle()hurHand.shape("hurHand") for hand in secHand, minHand, hurHand:hand.shapesize(1, 1, 3)hand.speed(0) # 建立输出文字Turtleprinter = turtle.Turtle()# 隐藏画笔的turtle形状printer.hideturtle()printer.penup() def SetupClock(radius):# 建立表的外框turtle.reset()turtle.pensize(7)for i in range(60):Skip(radius)if i % 5 == 0:turtle.forward(20)Skip(-radius - 20) Skip(radius + 20)if i == 0:turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:Skip(25)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-25)elif (i == 25 or i == 35):Skip(20)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-20)else:turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-radius - 20)else:turtle.dot(5)Skip(-radius)turtle.right(6) def Week(t):week = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]return week[t.weekday()] def Date(t):y = t.yearm = t.monthd = t.dareturn "%s %d%d" % (y, m, d) def Tick():# 绘制表针的动态显示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) turtle.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.hom()turtle.tracer(True) # 100ms后继续调用tickturtle.ontimer(Tick, 100) def main():# 打开/关闭龟动画,并为更新图纸设置延迟。turtle.tracer(False)Init()SetupClock(160)turtle.tracer(True)Tick()turtle.mainloop() if __name__ == "__main__":main()




2)效果展示
基于Python制作三款起床闹钟的示例代码
文章图片


二、Turtle实现模拟时钟 1)代码展示
基本思路:自定义shape,画出时针、分针、秒针。通过register_shape()函数。 指针的位置通过shape类setheading()函数进行设置。 获取系统时间作为当前时间,datetime.today()。 利用ontimer()函数定义定时器事件,触发屏幕更新。 利用write()函数在屏幕上显示文本。
from turtle import *from datetime import datetime mode("logo") # 向上(北),正角度为顺时针 thisday = 0thisecond = 0 second_hand = Turtle()minute_hand = Turtle()hour_hand = Turtle()writer = Turtle()writer.getscreen().bgcolor('gray90')writer.color("gray20", "gray20") def jump(distanz, winkel=0):penup()right(winkel)forward(distanz)left(winkel)pendown()'''laenge 指针长度width 指针宽度spitze 箭头边长'''def hand(laenge, spitze, width):lt(90)fd(width)rt(90)fd(laenge*1.15)rt(90)fd(width * 2)rt(90)fd(laenge*1.15)rt(90)fd(width)rt(90)fd(laenge*1.15)rt(90)fd(spitze/2.0)lt(120)fd(spitze)lt(120)fd(spitze)lt(120)fd(spitze/2.0) def make_hand_shape(name, laenge, spitze, width):reset()jump(-laenge*0.15) # 指针靠近表盘中心的末端,但不与圆心重合begin_poly()hand(laenge, spitze, width)end_poly()hand_form = get_poly()register_shape(name, hand_form) def clockface(radius):reset()# 外圆周pensize(2)colors = ['green3', 'green2', 'gray98']# 从外向内fillfor i in range(3):jump(radius+7+(2-i)*4,90)fillcolor(colors[i])begin_fill()circle(radius+7+(2-i)*4, steps=1000)end_fill()jump(-radius-7-(2-i)*4,90) # 刻度pensize(7)color("gray60", "gray60")# 经验值params = [-35, -40, -40, -25, -15, -5, 0, -5, -15, -25, -40, -40] #距离angles = [0, -15, -25, -40, -35, -30, 0, 30, 35, 40, 25, 15] # 角度for i in range(60):jump(radius)if i % 5 == 0:fd(-15)# 下面三行写表盘数字jump(params[i/5], angles[i/5])write(12 if i/5==0 else i/5, align="center", font=("Courier", 20, "bold"))jump(params[i/5], 180+angles[i/5])jump(-radius+15)else:dot(3)jump(-radius)rt(6) def setup():global second_hand, minute_hand, hour_hand, writer# 自定义形状make_hand_shape("hour_hand", 90, 25, 5)make_hand_shape("minute_hand",130, 25, 3)make_hand_shape("second_hand", 140, 10, 1) # 画表盘clockface(160) hour_hand.shape("hour_hand")hour_hand.color("gray30", "gray12") minute_hand.shape("minute_hand")minute_hand.color("gray40", "blue") second_hand.shape("second_hand")second_hand.color("red4", "red4") for hand in hour_hand, minute_hand, second_hand:hand.resizemode("user")hand.shapesize(1, 1, 1)hand.speed(1)ht() writer.ht()writer.pu()writer.bk(85)def wochentag():wochentag = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]return wochentag[t.weekday()] def get_mmdd(z):m = z.montht = z.dayreturn "%d月%d日" % (m, t) def get_yyyy(z):j = z.yearreturn "%d" % (j) def write_date(t):global thisdayx = t.dayif thisday != x:thisday = xwriter.clear()writer.home()writer.forward(65)writer.write(wochentag(t),align="center", font=("Courier", 16, "bold"))writer.back(150)writer.write(get_mmdd(t),align="center", font=("Courier", 16, "normal"))writer.back(15)writer.write(get_yyyy(t),align="center", font=("Courier", 10, "normal"))writer.forward(100) def tick():global thisecondt = datetime.today()if thisecond != t.second:thisecond = t.second#print tsekunde = t.second + t.microsecond * 0.000001minute = t.minute + sekunde / 60.0stunde = t.hour + minute / 60.0tracer(False)write_date(t)tracer(True)hour_hand.setheading(30 * stunde)minute_hand.setheading(6 * minute)second_hand.setheading(6 * sekunde)ontimer(tick, 10) def main():tracer(False)setup()tracer(True)tick()return "EVENTLOOP" if __name__ == "__main__":msg = main()print msgmainloop()

2)效果展示
基于Python制作三款起床闹钟的示例代码
文章图片


三、简易时钟 1)代码展示
# coding=utf-8import turtlefrom datetime import * # 由于表盘刻度不连续,需频繁抬起画笔,放下画笔def skip(step):turtle.penup()# 画笔抬起turtle.forward(step)# 画笔移动stepturtle.pendown()# 画笔落下 # 建立表针,定制表针形状和名字def make_hand(name, length):turtle.reset() skip(-length * 0.1)# 表针一端,过表盘中心一小段,开始绘制turtle.begin_poly()# 开始记录多边形的第一个顶点。turtle.forward(length * 1.1)# 设置表针长度,绘制表针turtle.end_poly()# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 handForm = turtle.get_poly()# 返回最后记录的形状 turtle.color('black')turtle.register_shape(name, handForm) # 三个表针初始化,实例化def init_hand():global sec_hand, min_hand, hou_hand, printer# 重置Turtle指向北turtle.mode("logo")# logo:向上(北) 顺时针standard:向右(东)逆时针 # 建立三个表针Turtle并初始化make_hand("sec_Hand", 135)make_hand("min_Hand", 110)make_hand("hou_Hand", 70) sec_hand = turtle.Turtle()sec_hand.shape("sec_Hand")min_hand = turtle.Turtle()min_hand.shape("min_Hand")hou_hand = turtle.Turtle()hou_hand.shape("hou_Hand") # 笔的属性for hand in sec_hand, min_hand, hou_hand:hand.shapesize(1, 1, 3)hand.speed(0) # 建立输出打印的文字Turtleprinter = turtle.Turtle() # 隐藏画笔的turtle形状printer.hideturtle()printer.penup() # 设置表盘def set_clock(radius):turtle.reset()turtle.pencolor('red')# 设置画笔颜色turtle.fillcolor('pink')# 设置绘制图形的填充颜色turtle.pensize(10)# 画笔宽度 for i in range(60):skip(radius)# 逢五 使用线条并加粗if i % 5 == 0:turtle.forward(20)skip(-radius - 20)skip(radius + 20) # 设置数字的位置及字体,大小if i == 0:turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:skip(25)turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))skip(-25)elif i == 25 or i == 35:skip(20)turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))skip(-20)else:turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))skip(-radius - 20)# 非五,以点代替else:turtle.dot(5)skip(-radius)turtle.right(6) # 显示星期def show_week(t):week = ["星期一Mon", "星期二Tue", "星期三Wed", "星期四Thu", "星期五Fri", "星期六Sat", "星期日Sun"]return week[t.weekday()]# t.weekday() 周一为0,周二为1...可作为列表的index # 显示日期def show_data(t):y = t.yearm = t.monthd = t.dayreturn "{} 年 {} 月 {} 日".format(y, m, d) # 显示时间# def show_time(t):#m = t.minute#h = t.hour#return "{}:{}".format(h, m) # 显示整个时钟def show_clock():# 获取时间t = datetime.today()second = t.second + t.microsecond * 0.000001minute = t.minute + second / 60.0hour = t.hour + minute / 60.0 sec_hand.setheading(6 * second)min_hand.setheading(6 * minute)hou_hand.setheading(30 * hour) turtle.tracer(False) printer.forward(65)printer.write(show_week(t), align='center', font=("Courier", 14, "bold")) printer.back(65)printer.write("The Clock of Hua", align="center", font=("Courier", 16, "bold")) printer.back(65)printer.write(show_data(t), align='center', font=("Courier", 14, "bold")) # printer.back(25)# printer.write(show_time(t), align="center", font=("Courier", 14, "bold"))# 回到原点,以便于下一轮的显示printer.home()turtle.tracer(True) # 100ms后继续调用show_clockturtle.ontimer(show_clock, 100) # main函数def main():turtle.tracer(False)# 设置背景ts = turtle.getscreen()ts.bgcolor("#cccccc")# 初始化init_hand()# 设置时钟set_clock(180)turtle.tracer(True)# 显示时钟show_clock()turtle.mainloop() if __name__ == "__main__":main()

2)效果展示
基于Python制作三款起床闹钟的示例代码
文章图片

以上就是基于Python制作三款起床闹钟的示例代码的详细内容,更多关于Python起床闹钟的资料请关注脚本之家其它相关文章!

    推荐阅读