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

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

导语

叮叮叮,我们要按时长大

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

嗨!大家有没有生物钟不准时的时候,是不是每到休息日或者长假就会经常要倒时差?

每天上班最痛苦的事情就是早起早起早起!这是大部分上班族的痛苦,但是不上班又是不可能的啦,因为都是为了搞钱

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

一、Turtle绘制时钟

1)代码展示

import turtle
from datetime import *

# 抬起画笔,向前运动一段距离放下
def Skip(step):
    turtle.penup()
    turtle.forward(step)
    turtle.pendown()

def mkHand(name, length):
    # 注册Turtle形状,建立表针Turtle
    turtle.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)

    # 建立输出文字Turtle
    printer = 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.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起床闹钟的资料请关注我们其它相关文章!

(0)

相关推荐

  • python实现闹钟定时播放音乐功能

    自己写的闹钟,只可以播放wav格式的音频,供大家参考,具体内容如下 Python代码: import time import sys soundFile = 'sound.wav' not_executed = 1 def soundStart(): if sys.platform[:5] == 'linux': import os os.popen2('aplay -q' + soundFile) else: import winsound winsound.PlaySound(soundFi

  • Python编写一个闹钟功能

    音频文件放入和.py文件同级的目录下 import winsound # 导入此模块实现声音播放功能 import time # 导入此模块,获取当前时间 # 提示用户设置时间和分钟 my_hour = input("请输入时:") my_minute = input("请输入分:") flag = 1 while flag: t = time.localtime() # 当前时间的纪元值 fmt = "%H %M" now = time.str

  • 使用python编写一个语音朗读闹钟功能的示例代码

    想找一个可以播放文字的闹钟找不到,自己写一个更简单.TTS实现由很多种办法,百度等都提供了API接口,但类似百度,需要先注册等一系列动作. 其实windows自带的win32com功能可以简单实现TTS功能.要用到win32com模块, 可以通过如下指令进行安装 python -m pip install pypiwin32 安装以后就可以编写播放代码了如下 #coding:utf-8 import win32com.client spk = win32com.client.Dispatch("

  • 利用QT写一个极简单的图形化Python闹钟程序

    今天我们讲一下用Python写的GUI小程序.一个小闹钟(只是屏幕提示,没有声音哦) 让我们先介绍这个闹钟如何奇葩. 需要通过命令行启动. 没有标题栏. 没菜单. 甚至没有关闭按钮. 没有运行界面. 看到这里想必大家要问了,何必去做一个这样弱爆了的程序呢.显然,教育意义大于其实际用处. 像其他的模块一样,QT界面包是需要加载的. 我们用到了命令行输入,所以,sys模块也是必须的. 用到了时间,但是我们不需要使用time模块,我们用QT提供的QTime模块. 让我们先写import 语句部分. i

  • 用Python实现命令行闹钟脚本实例

    前言: 这篇文章给大家介绍了怎样用python创建一个简单的报警,它可以运行在命令行终端,它需要分钟做为命令行参数,在这个分钟后会打印"wake-up"消息,并响铃报警,你可以用0分钟来测试,它会立即执行,用扬声器控制面板调整声音. 以下是脚本: # alarm_clock.py # Description: A simple Python program to make the computer act # like an alarm clock. Start it running

  • 利用Python编写一个闹钟,治好你的拖延症

    目录 一.小科普 1)time模块 2)messagebox模块 二.准备中 1)环境安装 2)素材(音乐+背景可修改) 三.开始敲代码 1)导入模块 2)界面设置 3)获取当前实时时间 4)设置开始.退出按钮 5)设置到点播放音乐 6)额外设置的一个弹窗提醒 四.效果展示 总结 导语 相信有不少人的闹钟是设成这样的: 6:20 6:30 6:35 6:37 …… 起床真是令人困扰的事情,有的人根本不用定闹钟,但有的人提前半个小时闹钟都叫不醒,你的闹钟怎么定的? 举个粒子: 现在这天气真的就很需

  • Python利用PyQT5设置闹钟功能

    通过PyQt5实现设置一个小闹钟的功能,到了设置的时间后可以响起一段音乐来提醒. 导入UI界面组件相关的模块 from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * 导入应用操作相关的模块 import sys from PyQt5.QtMultimedia import * 初始化函数 init_ui() 函数,PyQt5 界面布局使用了三种,分别是垂直化布局.水平化布局.栅格布局.

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

    目录 导语 一.Turtle绘制时钟 1)代码展示 2)效果展示 二.Turtle实现模拟时钟 1)代码展示 2)效果展示 三.简易时钟 1)代码展示 2)效果展示 导语 叮叮叮,我们要按时长大 我是你们的木子同学!当当当当——隆重出场,撒花撒花~ 嗨!大家有没有生物钟不准时的时候,是不是每到休息日或者长假就会经常要倒时差? 每天上班最痛苦的事情就是早起早起早起!这是大部分上班族的痛苦,但是不上班又是不可能的啦,因为都是为了搞钱 今天小编就用代码示例化,给大家展示一下不同的时钟,希望大家按时上班

  • 基于Python制作天眼查小程序的示例代码

    目录 界面搭建 整体布局 界面美化 天眼查爬虫 获取信息 代码编写 结果展示 今天我们一起来制作一个天眼查GUI程序,开宗明义,我们先来看下最终的效果 这次的GUI程序,我们使用的框架是PyQt5,该框架拥有比tkinter更为丰富的内置组件,在界面美化方面,貌似也更胜一筹! 从上图也可以看出,我们的目标还是蛮远大的,最终我们希望可以完成一个工具集合,把我们日常当中常用的功能都集成的该GUI程序中,比如天眼查公司信息,知乎用户知识图谱,B视频弹幕抓取等等. 好了,今天我们先完成天眼查的功能吧~

  • 基于Python制作一款屏幕颜色提取器

    目录 1.使用效果 2.所需python包 3.python小技巧 3.1控件数组 3.2将控件作为属性 3.3怎样重设控件颜色 3.4一些用到的字符串操作 3.5鼠标位置像素颜色 3.6窗口始终置顶 3.7文本框不允许编辑但允许复制 4.完整代码 1.使用效果 如下面动图所示,点击取色按钮后,将鼠标移动到想要取色的位置,等待两秒即可取色: 点击save color按钮可以将颜色存储到color library区域,同时如图所示, ! ! ! !红框内所有的方形元件其实都是按钮,点击后能获得颜色

  • 基于Python实现千图成像工具的示例代码

    目录 前置 GUI制作 GUI界面设计 逻辑设计 图片处理 修改底图大小 修改组图大小 计算图片填充次数 组图合成 图片合成 GUI打包 千图成像也就是用N张图片组成一张图片的效果.制作方法有很多的,最常见的如用ps.懒人图云.foto-mosaik-edda这些制作. 千图成像的效果我大致分为两类:一为直接用N张图片根据底图的像素颜色.大小,一张张的组成底图,如foto-mosaik-edda:二为用N张图片根据底图的像素大小,组成一张与底图大小相仿的图片,再把二者合成,经调整透明度而成的图片

  • 基于Python实现音乐播放器的实现示例代码

    目录 一.环境设置 二.播放功能 三.停止功能 四.暂停与恢复 五.关闭 六.完整代码 七.改进 一.环境设置 第一步引入必须的各类包 import os import tkinter import tkinter.filedialog import random import time import threading import pygame 特别是pygame需要手动安装 pip install pygame 二.播放功能 首先选择音乐目录,然后创建播放现成,播放音乐. # 播放按钮 d

  • 基于python opencv单目相机标定的示例代码

    相机固定不动,通过标定版改动不同方位的位姿进行抓拍 import cv2 camera=cv2.VideoCapture(1) i = 0 while 1: (grabbed, img) = camera.read() cv2.imshow('img',img) if cv2.waitKey(1) & 0xFF == ord('j'): # 按j保存一张图片 i += 1 u = str(i) firename=str('./img'+u+'.jpg') cv2.imwrite(firename

  • 基于Python制作简易的windows修改器

    现在应该大部分人都使用win11系统吧,不用也要强行给你更新到win11,win11其实挺好用哈,只是有一点不好用,就是右键的菜单,今天做个小程序,就是应该修改win11的一个应用程序 先来看一段视频哈! 视频链接 windows11修改器 提取码:v9ms 源代码加编译后的文件 提取码:enr4 该程序的安装包 已被博主做成了安装包 这款软件纯python制作,内容简单 1.可以将win11的右键改为win10经典版,还可以进行恢复 2.可以去掉win11右键的终端(也就是win11的最高管理

  • 基于python制作简易版学生信息管理系统

    一.前言 本篇博客对于文件操作.字典.列表.匿名函数以及sort()等内置函数进行了系统的整理操作,以设计一个学生信息管理系统的形式展示,具体概念方法等会在代码后进行分析讲述,请读者仔细分析每一处解析,对于基础巩固将会有很大的帮助,其中还有每一块代码的设计思路图,逻辑分析会有一定的提升. 二.需求分析 本程序需要用到os模板首先导入,并命名要存储信息的文件 import os File_Object_Name = 'Student_Inforation.txt' 三.主函数 def Main()

  • 基于Python制作公交车站查询系统

    目录 一.设计目的 1.教学目的 2.教学要求 二.需求分析 1.问题 2.系统 3.运行要求 三.系统模块设计 四.详细设计 五.需要设计的函数 六.Python源码 七.运行效果 一.设计目的 1.教学目的 本课程设计是学生学习完<Python程序设计>课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用Python语言进行程序设计的方法,加深对Python语言特点和使用Python语言进行程序设计开发过程的理解,加强动手能力.其主要目的是: (1)进一步培养学生Python程序

  • 基于Python制作一个多进制转换工具

    目录 前言 主要步骤 完整代码 前言 学习资料下载链接 提取码:tha8  进制转换计算工具含源文件 主要步骤 导入模块 import tkinter from tkinter import * import tkinter as tk from tkinter.ttk import * 整个框架的主结构 root = Tk() root.title('贱工坊-进制转换计算') # 程序的标题名称 root.geometry("580x400+512+288") # 窗口的大小及页面的

随机推荐