在快节奏的现代生活中,常常因为忙碌的工作而忽视了日常饮水的重要性。我的老婆也不例外,她经常全神贯注地投入到工作中,一整天下来都忘记喝几口水。长期下来,这不仅会导致皮肤干燥、容易疲劳,还可能引发头痛、注意力难以集中等问题。为了帮助她养成良好的饮水习惯,我决定开发一款智能喝水提醒助手。
系统模块划分:
├── 主程序模块
│ ├── 界面管理
│ ├── 定时器控制
│ └── 数据统计
├── 设置模块
│ ├── 参数配置
│ └── 数据持久化
└── 提醒模块
├── 全屏提醒
└── 用户交互
采用 MVC 架构:
class WaterReminderApp(QtWidgets.QWidget):
"""主应用类"""
def __init__(self):
super().__init__()
self.setup_ui()
self.setup_timer()
self.setup_tray()
class WaterReminderApp(QtWidgets.QWidget):
"""主程序类"""
def __init__(self):
super().__init__()
self.setup_ui()
self.setup_timer()
self.setup_tray()
class SettingsDialog(QtWidgets.QDialog):
"""设置对话框类"""
def __init__(self, parent=None):
super().__init__(parent)
self.setup_ui()
class ReminderWindow(QtWidgets.QWidget):
"""提醒窗口类"""
def __init__(self, parent=None):
super().__init__(parent)
self.setup_ui()
settings = {
'interval': int, # 提醒间隔(分钟)
'opacity': float, # 界面透明度(0.0 - 1.0)
'text': str, # 提醒文本
'autostart': bool # 开机自启
}
statistics = {
'date': str, # 日期(格式:YYYY-MM-DD)
'count': int, # 喝水次数
'timestamps': list # 喝水时间戳列表
}
def show_reminder():
"""显示提醒窗口"""
# 弹出全屏半透明提醒窗口
def update_progress():
"""更新进度条"""
# 根据时间间隔更新进度条的进度
def drink_water():
"""处理喝水确认"""
# 记录喝水次数和时间戳
def save_settings():
"""保存设置"""
# 将用户设置保存到配置文件
import sys
import time
from PyQt5 import QtWidgets, QtCore, QtGui
class WaterReminderApp(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setup_ui()
self.setup_timer()
self.setup_tray()
def setup_ui(self):
# 初始化界面
self.setWindowTitle("智能喝水提醒助手")
self.setGeometry(100, 100, 400, 200)
# 进度条
self.progress_bar = QtWidgets.QProgressBar(self
)
self.progress_bar.setGeometry(50, 50, 300, 30)
# 喝水次数统计
self.count_label = QtWidgets.QLabel(self)
self.count_label.setText("喝水次数:0")
self.count_label.setGeometry(50, 100, 200, 30)
def setup_timer(self):
# 设置定时器
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.update_progress)
self.timer.start(60000) # 每分钟更新一次进度条
def setup_tray(self):
# 创建系统托盘
self.tray_icon = QtWidgets.QSystemTrayIcon(self)
self.tray_icon.setIcon(QtGui.QIcon("icon.png"))
self.tray_icon.show()
def update_progress(self):
"""进度条更新算法"""
current = time.time()
elapsed = current - self.last_time
progress = (elapsed / self.interval) * 100
self.progress_bar.setValue(int(progress))
def show_reminder(self):
"""显示提醒窗口"""
reminder_window = ReminderWindow()
reminder_window.show()
class ReminderWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setup_ui()
def setup_ui(self):
# 初始化提醒窗口
self.setWindowTitle("喝水提醒")
self.setGeometry(100, 100, 400, 200)
self.setWindowOpacity(0.8) # 设置透明度
# 提醒文本
self.reminder_label = QtWidgets.QLabel(self)
self.reminder_label.setText("该喝水啦!")
self.reminder_label.setGeometry(50, 50, 300, 30)
# 确认按钮
self.drink_button = QtWidgets.QPushButton(self)
self.drink_button.setText("喝水了")
self.drink_button.setGeometry(50, 100, 100, 30)
self.drink_button.clicked.connect(self.drink_water)
def drink_water(self):
"""处理喝水确认"""
# 记录喝水次数和时间戳
print("喝水确认")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main_window = WaterReminderApp()
main_window.show()
sys.exit(app.exec_())
def update_progress(self):
"""进度条更新算法"""
current = time.time()
elapsed = current - self.last_time
progress = (elapsed / self.interval) * 100
self.progress_bar.setValue(int(progress))
测试项目 | 预期结果 | 实际结果 |
---|---|---|
定时提醒 | 准时提醒 | 通过 |
统计功能 | 准确记录 | 通过 |
设置保存 | 正确保存 | 通过 |
界面显示 | 正确显示 | 通过 |
完整代码见 GitHub 仓库和附件。