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

下面我将详细讲解“基于Python制作三款起床闹钟的示例代码”的完整攻略。

简介

起床是每天必须要做的事情,但很多人都有困难。为了帮助你更容易地起床,我们提供了三个 Python 闹钟项目。这些闹钟可以让你自由选择你最喜欢的方式去唤醒你的晨感。

安装

使用这些 Python 闹钟项目,需要先安装 Python。请参阅Python网站获取有关如何在特定操作系统上安装 Python 的详细信息。Python版本应大于等于3.5。

安装 Python 后,我们需要安装两个必要的 Python 包:pygameplaysound。使用以下命令在终端中安装它们。

pip install pygame
pip install playsound

项目一:数字闹钟

数字闹钟是我们第一个 Python 闹钟项目。它使用 Python 的 datetime 模块获取当前时间和设置闹钟时间。根据条件不断判断当前时间是否与闹钟时间一致,若一致则使用 tkinter 呈现消息框提醒你,直到你关闭消息框为止。下面是示例代码:

import tkinter
import datetime
import time

def set_alarm(alarm_time):
     alarm_hour = alarm_time[0]
     alarm_minute = alarm_time[1]
     while True:
          now = datetime.datetime.now()
          current_hour = now.hour
          current_minute = now.minute
          if (alarm_hour == current_hour and alarm_minute == current_minute):
              print("Time to Wake up")
              break

def get_alarm_time():
     alarm_input = input("Set the alarm time : [HH:MM] ")
     try:
          alarm_time = [int(n) for n in alarm_input.split(":")]
          display_alarm_time = datetime.datetime.now().replace(hour=alarm_time[0],minute=alarm_time[1],second=0)
          print("Alarm Set For :{}".format(display_alarm_time.strftime("%I:%M:%S %p")))
          return alarm_time
     except ValueError:
          print("Invalid Time Entered")
          return get_alarm_time()

alarm_time = get_alarm_time()
set_alarm(alarm_time)

项目二:游戏闹钟

游戏闹钟是我们第二个 Python 闹钟项目。它使用 pygame 模块生成一个易于播放的声音,并在触发闹钟时播放一个简单的游戏。你可以选择 Pygame 默认的 .wav 音频文件或者自己用音频剪辑软件制作自己的音频文件。下面是示例代码:

import pygame
import datetime
import time

pygame.init()

display_width = 800
display_height = 700

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Game Alarm Clock')
clock = pygame.time.Clock()

crash_sound = pygame.mixer.Sound("examples/alarm-clock/alarm_sound.wav")

def blit_text(surface, text, pos, font, color=pygame.Color('black')):
    words = [word.split(' ') for word in text.splitlines()]  # 2D array where each row is a list of words.
    space = font.size(' ')[0]  # The width of a space.
    max_width, max_height = surface.get_size()
    x, y = pos
    for line in words:
        for word in line:
            word_surface = font.render(word, 0, color)
            word_width, word_height = word_surface.get_size()
            if x + word_width >= max_width:
                x = pos[0]  # Reset the x.
                y += word_height  # Start on new row.
            surface.blit(word_surface, (x, y))
            x += word_width + space
        x = pos[0]  # Reset the x.
        y += word_height  # Start on new row.

def message_display(text):
    largeText = pygame.font.Font('freesansbold.ttf',20)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf, TextRect)
    crash_sound.play()
    pygame.display.update()
    time.sleep(2)

def text_objects(text, font):
    textSurface = font.render(text, True, pygame.Color('black'))
    return textSurface, textSurface.get_rect()

def game_loop():
    is_game_over = False
    while not is_game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                is_game_over = True

        gameDisplay.fill(pygame.Color('white'))
        pygame.display.update()
        clock.tick(60)

def set_alarm(game_time):
     alarm_hour = game_time[0]
     alarm_minute = game_time[1]
     while True:
          now = datetime.datetime.now()
          current_hour = now.hour
          current_minute = now.minute
          if (alarm_hour == current_hour and alarm_minute == current_minute):
              message_display("Time to Wake up")
              game_loop()
              break

def get_game_time():
     alarm_input = input("Set the wakeup game time [HH:MM] :")
     try:
          alarm_time = [int(n) for n in alarm_input.split(":")]
          display_alarm_time = datetime.datetime.now().replace(hour=alarm_time[0],minute=alarm_time[1],second=0)
          print("Alarm is set to :{}".format(display_alarm_time.strftime("%I:%M:%S %p")))
          return alarm_time
     except ValueError:
          print("Invalid time entered")
          return get_game_time()

game_time = get_game_time()
set_alarm(game_time)

项目三:动画闹钟

动画闹钟是我们最后一个 Python 闹钟项目。它使用 PyQt5 创建了一个图形用户界面(GUI),在触发闹钟时会显示动画效果。这个过程需要有效益的计算机图形库 PyQt5 和样式表QSS。下面是示例代码:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 470, 430)
        self.setWindowTitle('Animation Alarm')
        self.label = QLabel(self)
        pixmap = QPixmap('animation.gif')
        self.label.setPixmap(pixmap)
        self.label.setGeometry(0,-100,480,480)

        self.timeEdit = QTimeEdit(self)
        self.timeEdit.move(45,360)

        btn1 = QPushButton("Set Alarm",self)
        btn1.move(300,360)
        btn1.clicked.connect(self.startTimer)

        self.show()

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):
        color = QColor(0, 0, 0)
        color.setNamedColor('#d4d4d4')
        qp.setPen(QPen(Qt.red, 4, Qt.SolidLine))
        qp.setBrush(QBrush(Qt.SolidPattern))
        qp.drawRect(20, 80, 400, 240)

    def startTimer(self):
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.countdown)
        self.timer.start(1000)

    def countdown(self):
        timer_value = self.timeEdit.time().toString()
        current_time = QDateTime.currentDateTime().toString()
        if timer_value == current_time[11:16]:
            QMessageBox.information(self,"Alert", "Time is up! Timer finished!")
            self.timer.stop()
            self.label.move(0,0)
        else:
            print("Still waiting...")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

以上就是三个 Python 闹钟项目的示例代码、操作文档及开发环境的详细攻略。希望对你的 Python 学习之旅有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python制作三款起床闹钟的示例代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python3让print输出不换行的方法

    当使用Python 3的print函数输出时,默认情况下会在每次输出后自动添加一个换行符。但有时候我们需要把多个print函数输出的内容放在同一行,此时就需要用到print函数的不换行输出方法。以下是两种不换行输出的方法: 方法一:使用print函数的end参数 我们可以使用print函数的end参数来控制输出结束时要添加的字符。如果在每次print输出时使…

    python 2023年6月5日
    00
  • Python中多线程及程序锁浅析

    Python中多线程及程序锁浅析 在Python中,我们通常使用threading模块来实现多线程编程。 多线程基础 创建线程 使用threading.Thread()函数可以创建一个线程,语法如下: my_thread = threading.Thread(target=my_function, args=my_args) 其中,target参数是指定需要…

    python 2023年6月6日
    00
  • Python每天必学之bytes字节

    当我们使用Python进行二进制数据处理时,经常需要使用bytes类型。这篇文章将为大家提供关于bytes字节的完整攻略。 bytes字节到底是什么? 在计算机中,数据的最小单位是字节。一个字节(byte)相当于8个二进制位(bit)。bytes字节就是由若干个字节构成的不可变序列,每一个字节可以存储0-255之间的整数。 在Python中,我们可以使用b前…

    python 2023年5月20日
    00
  • python实现超市管理系统(后台管理)

    Python实现超市管理系统(后台管理)攻略 介绍 本文将讲解如何使用Python语言实现一个基于命令行的超市管理系统的后台管理部分。该系统允许管理员登录并管理商品信息,包括商品信息的添加、修改、删除、查询等基本操作。 技术栈 Python 3.x SQLite3 实现步骤 1. 创建数据库 在本项目中,我们将使用SQLite3作为后台数据库。可以使用Pyt…

    python 2023年5月30日
    00
  • Python实现连接两个无规则列表后删除重复元素并升序排序的方法

    下面是实现连接两个无规则列表后删除重复元素并升序排序的方法的完整攻略: 问题描述 假设现在有两个列表 list1 和 list2,它们的元素都是无规律的、可能有重复的、可能不同类型的。现在需要将这两个列表合并成一个列表,删除其中的重复元素,然后对列表中的元素进行升序排序。 解决方案 1. 合并两个列表 使用 extend() 方法将两个列表合并成一个新的列表…

    python 2023年6月5日
    00
  • python做反被爬保护的方法

    针对如何让Python反爬虫,我们可以列举以下几种方法。 1. 设置请求头 Headers 请求头中的User-Agent给出了客户端的相关信息,网站可以根据User-Agent判断请求来自哪里。默认情况下,Python的requests库并不会发送类似于浏览器的请求头信息,这会被很多网站认为是爬虫程序而被拒绝请求。因此在编写Python爬虫时需要添加请求头…

    python 2023年5月14日
    00
  • 详解Flask开发技巧之异常处理

    详解Flask开发技巧之异常处理 异常处理是Web开发中不可缺少的一部分,它可以帮助我们及时识别和处理系统、业务等方面的错误,提升用户体验。本文将详细讲解如何在Flask中进行异常处理,并给出两个实例进行说明。 1. 系统级异常处理 在Flask中,系统级异常可以通过app.errorhandler装饰器来处理。下面是一个示例: from flask imp…

    python 2023年5月13日
    00
  • Python print函数:如何将对象打印输出

    Python的内置函数print()是用于将文本或其他对象输出到屏幕的方法。在Python中,print()函数有多种用法,可以用于输出字符串、数字、对象等,并可以通过一些参数进行格式化输出。 以下是使用print函数将对象打印输出的完整攻略: 标准格式 在Python中,使用print函数输出最基本的方式就是直接在括号中输入要输出的内容。 示例: prin…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部