python做一个闹钟软件,python闹钟界面源码

  python做一个闹钟软件,python闹钟界面源码

  每天上班最痛苦的就是早起早起!这是大多数上班族的痛苦,但是不上班是不可能的,因为都是为了赚钱。本文用Python制作了三个有趣的闹钟。有兴趣的可以了解一下。

  00-1010简介1。乌龟画时钟1)代码显示2)效果显示2。海龟实现模拟时钟1)代码显示2)效果显示3。简单时钟1)代码显示2)效果显示

  

目录

  丁丁,我们必须按时长大。

  我是你的木子同学!当当——隆重登场,撒花~

  嗨!当你的生物钟不准时的时候,你总是会有时差吗?你是否经常在每个休息日或长假倒时差?

  每天上班最痛苦的就是早起早起!这是大多数上班族的痛苦,但是不上班是不可能的,因为都是为了赚钱。

  今天小编就用代码示例化,给大家展示一下不同的时钟,希望大家按时上班,按时搞钱啦

  

导语

  

一、Turtle绘制时钟

  进口甲鱼

  从日期时间导入*

  #举起刷子,向前移动一段距离,然后放下

  定义跳过(步骤):

  turtle.penup()

  龟.向前(一步)

  turtle.pendown()

  def mkHand(名称,长度):

  #注册乌龟形状并创建乌龟。

  turtle.reset()

  跳过(-长度* 0.1)

  #开始记录多边形的顶点。当前海龟的位置是多边形的第一个顶点。

  turtle.begin_poly()

  turtle.forward(长度* 1.1)

  #停止记录多边形的顶点。当前海龟位置是多边形的最后一个顶点。与第一个顶点连接。

  turtle.end_poly()

  #返回最后记录的多边形。

  handForm=turtle.get_poly()

  turtle.register_shape(名称,手形)

  定义初始化():

  全球秒针,米汉德,hurHand,打印机

  #将海龟重置为指向北方

  turtle.mode(徽标)

  #创建三只手龟并初始化它们。

  mkHand(secHand ,135)

  mkHand(minHand ,125)

  mkHand(hurHand ,90)

  secHand=海龟。乌龟()

  secHand.shape(secHand )

  minHand=海龟。乌龟()

  minHand.shape(minHand )

  hurHand=海龟。乌龟()

  hurHand.shape(hurHand )

  手牵手,米汉德,胡汉德:

  hand.shapesize(1,1,3)

  手速(0)

  #创建输出文本Turtle

  打印机=乌龟。乌龟()

  #隐藏画笔的乌龟形状

  printer.hideturtle()

  printer.penup()

  def设置时钟(半径):

  #创建表格的轮廓

  turtle.reset()

  乌龟冥想(7)

  对于(60):范围内的I

  跳过(半径)

  如果i % 5==0:

  龟.前进(20)

  跳过(-半径- 20)

  跳过(半径20)

  如果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.year

   m = t.month

   d = t.da

   return "%s %d%d" % (y, m, d)

  def Tick():

   # 绘制表针的动态显示

   t = datetime.today()

   second = t.second + t.microsecond * 0.000001

   minute = t.minute + second / 60.0

   hour = t.hour + minute / 60.0

   secHand.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后继续调用tick

   turtle.ontimer(Tick, 100)

  def main():

   # 打开/关闭龟动画,并为更新图纸设置延迟。

   turtle.tracer(False)

   Init()

   SetupClock(160)

   turtle.tracer(True)

   Tick()

   turtle.mainloop()

  if __name__ == "__main__":

   main()

  

  

  

  

2)效果展示

  

  

  

二、Turtle实现模拟时钟

  

1)代码展示

  基本思路:自定义shape,画出时针、分针、秒针。通过register_shape()函数。 指针的位置通过shape类setheading()函数进行设置。 获取系统时间作为当前时间,datetime.today()。 利用ontimer()函数定义定时器事件,触发屏幕更新。 利用write()函数在屏幕上显示文本。

  

from turtle import *

  from datetime import datetime

  mode("logo") # 向上(北),正角度为顺时针

  thisday = 0

  thisecond = 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]

   # 从外向内fill

   for 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.month

   t = z.day

   return "%d月%d日" % (m, t)

  def get_yyyy(z):

   j = z.year

   return "%d" % (j)

  def write_date(t):

   global thisday

   x = t.day

   if thisday != x:

   thisday = x

   writer.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 thisecond

   t = datetime.today()

   if thisecond != t.second:

   thisecond = t.second

   #print t

   sekunde = t.second + t.microsecond * 0.000001

   minute = t.minute + sekunde / 60.0

   stunde = t.hour + minute / 60.0

   tracer(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 msg

   mainloop()

  

2)效果展示

  

  

  

三、简易时钟

  

1)代码展示

  

# coding=utf-8

  import turtle

  from datetime import *

  # 由于表盘刻度不连续,需频繁抬起画笔,放下画笔

  def skip(step):

   turtle.penup() # 画笔抬起

   turtle.forward(step) # 画笔移动step

   turtle.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)

   # 建立输出打印的文字Turtle

   printer = 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.year

   m = t.month

   d = t.day

   return "{} 年 {} 月 {} 日".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.000001

   minute = t.minute + second / 60.0

   hour = 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_clock

   turtle.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起床闹钟的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: