久坐提醒应用程序
引言
长时间久坐不动影响身体健康,容易导致颈椎病、腰椎病等问题。就拿我自己来说,从事了几年了开发工作,由于于长时间保持同一姿势,我的颈椎出现了小毛病。因此,我意识到需要采取措施来改善这一状况。我开始寻找能够提醒我定时休息的工具,但在网上搜罗了一圈之后,却发现没有找到完全符合我需求的工具。既然没有合适的,那不如自己动手开发一个,毕竟身体是自己的,钱是老板的。
为什么不用手机闹钟?
有人可能会问:为什么不用手机闹钟呢?那老板就要灵魂拷问我了,工作这么多年了想想自己工资为什么没涨,有没有想想自己的原因,上班时间一会儿看一下手机,搞什么哦[手动狗头]。其实,主要原因是大部分时间我都是在电脑前办公,一个能够在电脑上运行的提醒工具会更加方便。再加上我的手机闹钟不支持设置连续不间断的闹钟提醒,我不可能为了这个功能专门换个手机吧。
功能介绍
这个久坐提醒应用程序具有以下主要功能:
- 定时提醒:可以设置提醒间隔时间,程序会在设定的时间间隔后提醒用户起身活动。
- 自定义提醒:可以自定义提醒的时间间隔,并且可以随时开始或停止提醒。
- 音频提醒:程序会在提醒时间到达时播放音频提醒用户,不需要可以静音。
- 星空背景:应用程序界面采用了动态的星空背景,增加了视觉上的美感。
- 倒计时功能:有倒计时功能,让你不再疑惑还剩多久才能休息。
技术选型
-
Python:
- 丰富的库支持: Python拥有大量的第三方库,可以轻松实现各种功能,减少了开发时间。
- 快速开发: Python的动态类型和解释型特性使得开发过程更加灵活和快速。
- 工具类型的语言: Python非常适合开发各种实用工具和小型应用程序,对于这种桌面提醒工具来说是理想的选择。
-
PyQt6:
- 强大的GUI开发能力: PyQt6提供了丰富的UI组件和布局管理器,可以轻松创建复杂的图形界面。
- 与Python良好集成: PyQt6是Qt框架的Python绑定,可以充分利用Python的优势,同时享受Qt的强大功能。
- 现代化的UI: PyQt6支持创建现代化、美观的用户界面,这对于提升用户体验很重要。
- 丰富的文档和社区支持: PyQt有详细的文档和活跃的社区,遇到问题时可以快速找到解决方案。
- 自定义控件的灵活性: PyQt6允许轻松创建自定义控件,这对于实现特殊的UI效果。
主要功能代码实现
-
定时提醒功能:
- 使用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()
-
自定义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)
-
音频提醒:
- 使用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)
-
动画效果:
- 使用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()
-
倒计时功能:
- 在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,回复: 久坐提醒 获取下载链接。