Python基于PyQt5实现定时闹钟与音频播放功能详解

许南星
许南星
发布时间:2026-10-15 | 3人浏览过
原创

本文详细介绍如何使用Python的PyQt5库开发一个具备定时提醒功能的桌面小闹钟。文章涵盖UI界面布局(垂直、水平及栅格布局)、实时时间显示、定时监听逻辑以及音频播放模块的实现。通过绑定按钮事件与QTimer定时器,当设定时间到达时自动播放指定音乐文件。此外,文末补充了不依赖PyQt5的纯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中,界面布局主要采用三种方式:垂直布局、水平布局以及栅格布局。

def init_ui(self):
        self.setWindowTitle("小闹钟")  # 设置应用标题
        self.setWindowIcon(QIcon('clock.ico'))  # 设置应用图标

        form = QFormLayout()  # 初始化一个表单布局

        self.current_date_label = QLabel()
        self.current_date_label.setText("当前时间:")
        self.current_date_label_time = QLabel()
        self.current_date_label_time.setText(QDateTime.currentDateTime().toString('yyyy-MM-dd hh:mm:ss dddd'))
        self.current_timer = QTimer()
        self.current_timer.timeout.connect(self.show_current)
        self.current_timer.start(1000)

        self.timing_date_label = QLabel()
        self.timing_date_label.setText("定时时间:")
        self.timing_date_time = QDateTimeEdit()
        self.timing_date_time.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        self.timing_date_time.setDateTime(QDateTime.currentDateTime())

        self.set_rightone_label = QLabel()
        self.set_rightone_label.setText("设置铃声:")
        self.set_rightone_box = QComboBox()
        self.set_rightone_box.addItems(["冷漠 - 一路向北 (DJ版)","大城 - 下雪哈尔滨","许巍 - 时光"])

        form.addRow(self.current_date_label,self.current_date_label_time)
        form.addRow(self.timing_date_label,self.timing_date_time)
        form.addRow(self.set_rightone_label,self.set_rightone_box)

        hbox = QHBoxLayout()  # 初始化水平布局

        self.version = QLabel()
        self.version.setText("公众号:[Python 集中营]")

        self.start_btn = QPushButton()
        self.start_btn.setText("开始")
        self.start_btn.clicked.connect(self.start_btn_click)

        hbox.addWidget(self.version)
        hbox.addWidget(self.start_btn)

        vbox = QVBoxLayout()  # 初始化垂直布局
        vbox.addLayout(form)
        vbox.addLayout(hbox)

        self.setLayout(vbox)  # 设置主布局

实时时间显示逻辑

定义槽函数show_current(),其作用是实时获取系统时间并更新显示在QLabel组件上,当前实现精度为秒级刷新。

def show_current(self):
        '''
        刷新当前时间显示、每隔一秒钟刷新
        :return:
        '''
        current_time = QDateTime.currentDateTime().toString('yyyy-MM-dd hh:mm:ss dddd')
        self.current_date_label_time.setText(current_time)

定时监听与音乐播放实现

定义槽函数timing_his()(注:代码中实际命名为timing_lis),用于监听设定的定时时间是否已到达。一旦时间匹配,程序将播放音乐。示例代码中预置了三首歌曲,用户可根据个人喜好自行替换或添加音频文件。

def timing_lis(self):
        if QDateTime.currentDateTime() < self.timing_date_time.dateTime():
            print("[{}]:定时时间没有到达".format(QDateTime.currentDateTime().toString('yyyy-MM-dd hh:mm:ss dddd')))
        else:
            print("[{}]:定时时间已经到达".format(QDateTime.currentDateTime().toString('yyyy-MM-dd hh:mm:ss dddd')))
            self.current_timer_lis.stop()
            selected = self.set_rightone_box.currentText()
            print("开始播放音乐:{}".format(selected))
            url = QUrl.fromLocalFile("{}.mp3".format(selected))
            self.player.setMedia(QMediaContent(url))
            self.player.play()

启动按钮事件绑定

定义槽函数start_btn_click(),并将其绑定至“开始”按钮,点击该按钮即可启动闹钟计时功能。

def start_btn_click(self):
        self.current_timer_lis = QTimer()
        self.current_timer_lis.timeout.connect(self.timing_lis)
        self.current_timer_lis.start(500)

上述代码块构成了小闹钟应用的核心逻辑部分。

补充说明

纯Python命令行闹钟方案

除了使用PyQt5构建图形界面外,还可以直接使用Python标准库实现简单的命令行闹钟功能,参考代码如下。

请注意,音频文件需放置在与.py脚本相同的目录下,以便程序正确调用。

import winsound # 导入此模块实现声音播放功能
import time # 导入此模块,获取当前时间
# 提示用户设置时间和分钟
my_hour = input("请输入时:")
my_minute = input("请输入分:")
flag = 1
while flag:
  t = time.localtime() # 当前时间的纪元值
  fmt = "%H %M"
  now = time.strftime(fmt, t) # 将纪元值转化为包含时、分的字符串
  now = now.split(' ') #以空格切割,将时、分放入名为now的列表中
  hour = now[0]
  minute = now[1]
  if hour == my_hour and minute == my_minute:
    music = 'Good Time.wav'
    winsound.PlaySound(music, winsound.SND_ALIAS)
    flag = 0

以上就是关于利用Python和PyQt5实现闹钟功能的完整介绍。如需了解更多Python及PyQt5相关技术内容,欢迎查阅本站往期文章或继续关注后续更新,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表