久坐提醒应用程序

久坐提醒应用程序

引言

长时间久坐不动影响身体健康,容易导致颈椎病、腰椎病等问题。就拿我自己来说,从事了几年了开发工作,由于于长时间保持同一姿势,我的颈椎出现了小毛病。因此,我意识到需要采取措施来改善这一状况。我开始寻找能够提醒我定时休息的工具,但在网上搜罗了一圈之后,却发现没有找到完全符合我需求的工具。既然没有合适的,那不如自己动手开发一个,毕竟身体是自己的,钱是老板的。

为什么不用手机闹钟?

有人可能会问:为什么不用手机闹钟呢?那老板就要灵魂拷问我了,工作这么多年了想想自己工资为什么没涨,有没有想想自己的原因,上班时间一会儿看一下手机,搞什么哦[手动狗头]。其实,主要原因是大部分时间我都是在电脑前办公,一个能够在电脑上运行的提醒工具会更加方便。再加上我的手机闹钟不支持设置连续不间断的闹钟提醒,我不可能为了这个功能专门换个手机吧。

功能介绍

这个久坐提醒应用程序具有以下主要功能:

  1. 定时提醒:可以设置提醒间隔时间,程序会在设定的时间间隔后提醒用户起身活动。
  2. 自定义提醒:可以自定义提醒的时间间隔,并且可以随时开始或停止提醒。
  3. 音频提醒:程序会在提醒时间到达时播放音频提醒用户,不需要可以静音。
  4. 星空背景:应用程序界面采用了动态的星空背景,增加了视觉上的美感。
  5. 倒计时功能:有倒计时功能,让你不再疑惑还剩多久才能休息。

技术选型

  1. Python:

    • 丰富的库支持: Python拥有大量的第三方库,可以轻松实现各种功能,减少了开发时间。
    • 快速开发: Python的动态类型和解释型特性使得开发过程更加灵活和快速。
    • 工具类型的语言: Python非常适合开发各种实用工具和小型应用程序,对于这种桌面提醒工具来说是理想的选择。
  2. PyQt6:

    • 强大的GUI开发能力: PyQt6提供了丰富的UI组件和布局管理器,可以轻松创建复杂的图形界面。
    • 与Python良好集成: PyQt6是Qt框架的Python绑定,可以充分利用Python的优势,同时享受Qt的强大功能。
    • 现代化的UI: PyQt6支持创建现代化、美观的用户界面,这对于提升用户体验很重要。
    • 丰富的文档和社区支持: PyQt有详细的文档和活跃的社区,遇到问题时可以快速找到解决方案。
    • 自定义控件的灵活性: PyQt6允许轻松创建自定义控件,这对于实现特殊的UI效果。

主要功能代码实现

  1. 定时提醒功能:

    • 使用QTimer实现定时功能。
    • 在start_reminder方法中启动定时器。
    • 当定时器触发时,调用show_reminder方法显示提醒对话框。
    class SittingReminder(QWidget):
        def __init__(self):
            super().__init__()
            self.timer = QTimer(self)
            self.timer.timeout.connect(self.show_reminder)
    
        def start_reminder(self):
            interval = int(self.interval_input.text()) * 60 * 1000  # 转换为毫秒
            self.timer.start(interval)
    
        def show_reminder(self):
            reminder_dialog = ReminderDialog(self)
            reminder_dialog.exec()
    
  2. 自定义UI元素:

    • GlowingButton类使用QPainter绘制自定义按钮外观。
    • StarryBackground类实现了动态的星空背景效果。
    class GlowingButton(QPushButton):
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.setRenderHint(QPainter.RenderHint.Antialiasing)
    
            rect = self.rect()
            path = QPainterPath()
            path.addRoundedRect(QRectF(rect), 20, 20)
    
            painter.setPen(Qt.PenStyle.NoPen)
            painter.setBrush(self._color)
            painter.drawPath(path)
    
            if self._is_active and self.button_type == "start":
                self._draw_wave_lines(painter, rect)
            else:
                self._draw_text(painter, rect)
    
    class StarryBackground(QWidget):
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.setRenderHint(QPainter.RenderHint.Antialiasing)
    
            self._draw_background(painter)
            self._draw_stars(painter)
    
  3. 音频提醒:

    • 使用QMediaPlayer加载和播放音频文件。
    • 实现了静音功能,可以通过按钮控制。
    class SittingReminder(QWidget):
        def __init__(self):
            super().__init__()
            self.player = QMediaPlayer()
            self.audio_output = QAudioOutput()
            self.player.setAudioOutput(self.audio_output)
            self.player.setSource(QUrl(self.sound_url))
    
        def show_reminder(self):
            self.player.play()
    
        def _toggle_mute(self):
            self.is_muted = not self.is_muted
            self.audio_output.setMuted(self.is_muted)
    
  4. 动画效果:

    • 使用QPropertyAnimation为UI元素添加动画效果,如按钮的波浪动画。
    class GlowingButton(QPushButton):
        def __init__(self, text, button_type="start", parent=None):
            super().__init__(text, parent)
            self.wave_animation = QPropertyAnimation(self, b"waveOffset")
            self.wave_animation.setDuration(1000)
            self.wave_animation.setLoopCount(-1)
            self.wave_animation.setStartValue(0)
            self.wave_animation.setEndValue(20)
            self.wave_animation.setEasingCurve(QEasingCurve.Type.InOutQuad)
    
        def setActive(self, active):
            self._is_active = active
            if self.button_type == "start":
                if active:
                    self.wave_animation.start()
                else:
                    self.wave_animation.stop()
    
  5. 倒计时功能:

    • 在start_reminder方法中启动倒计时。
    • 使用QTimer每秒更新倒计时显示。
    class SittingReminder(QWidget):
        def __init__(self):
            super().__init__()
            self.countdown_timer = QTimer(self)
            self.countdown_timer.timeout.connect(self.update_countdown)
    
        def start_reminder(self):
            self.countdown_seconds = self.reminder_interval * 60
            self.update_countdown()
            self.countdown_timer.start(1000)  
    
        def update_countdown(self):
            if self.countdown_seconds > 0:
                hours, remainder = divmod(self.countdown_seconds, 3600)
                minutes, seconds = divmod(remainder, 60)
                time_str = f"{hours:02d}:{minutes:02d}:{seconds:02d}"
                self.interval_input.setText(time_str)
                self.countdown_seconds -= 1
            else:
                self.countdown_timer.stop()
    

在这里插入图片描述

程序获取方式

关注公众号码上Code,回复: 久坐提醒 获取下载链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值