Python PyQt 实现备忘录功能:添加、删除和提醒

本文介绍使用 Python PyQt 库实现一个简单的备忘录功能,包括添加新的备忘、删除备忘以及在指定时间提醒用户。代码示例清晰易懂,并附带详细的注释,方便理解。

代码示例

    def add_memo(self): 
        memo_dialog = QDialog(self) 
        memo_dialog.setWindowTitle('主人,我会提醒你的 喵') 
        memo_dialog.setWindowModality(Qt.ApplicationModal) 

        # 添加标题 
        title_label = QLabel('下旨', memo_dialog) 
        title_input = QLineEdit(memo_dialog) 

        # 添加内容 
        content_label = QLabel('奉天承运,皇帝诏曰', memo_dialog) 
        content_input = QTextEdit(memo_dialog) 

        # 添加提醒时间 
        time_label = QLabel('提醒时间', memo_dialog) 
        time_edit = QDateTimeEdit(memo_dialog) 
        time_edit.setDateTime(QDateTime.currentDateTime()) 

        # 添加按钮 
        add_button = QPushButton('盖章', memo_dialog) 
        add_button.clicked.connect(lambda: self.add_memo_item(title_input.text(), content_input.toPlainText(), time_edit.dateTime())) 

        # 添加布局 
        memo_layout = QVBoxLayout() 
        memo_layout.addWidget(title_label) 
        memo_layout.addWidget(title_input) 
        memo_layout.addWidget(content_label) 
        memo_layout.addWidget(content_input) 
        memo_layout.addWidget(time_label) 
        memo_layout.addWidget(time_edit) 
        memo_layout.addWidget(add_button) 
        memo_dialog.setLayout(memo_layout) 

        memo_dialog.exec_() 

    def add_memo_item(self, title, content, time): 
        memo_item = QListWidgetItem() 
        memo_item.setText(title) 
        memo_item.setData(Qt.UserRole, content) 
        memo_item.setData(Qt.UserRole+1, time) 
    
        # 添加删除按钮
        delete_button = QPushButton('删除')
        delete_button.clicked.connect(lambda: self.delete_memo_item(memo_item))
    
        # 添加布局
        layout = QHBoxLayout()
        layout.addWidget(QLabel(title))
        layout.addWidget(delete_button)
        memo_item.setSizeHint(layout.sizeHint())
        memo_item.setLayout(layout)
    
        self.memos.addItem(memo_item)
    
    def delete_memo_item(self, memo_item):
        confirm = QMessageBox.question(self, '确认删除', '确定要删除这个备忘吗?', QMessageBox.Yes | QMessageBox.No)
        if confirm == QMessageBox.Yes:
            self.memos.takeItem(self.memos.row(memo_item))

    def check_reminders(self): 
        current_time = QDateTime.currentDateTime() 
        for i in range(self.memos.count()): 
            memo_item = self.memos.item(i) 
            memo_time = memo_item.data(Qt.UserRole+1) 
            if memo_time <= current_time: 
                memo_content = memo_item.data(Qt.UserRole) 
                QMessageBox.information(self, '嗯嗯~~', memo_content) 
                self.memos.takeItem(i) 
                break  # 在找到一个需要提醒的备忘后立即停止循环,避免漏提醒

代码解释

  1. add_memo() 函数:

    • 创建一个 QDialog 窗口用于添加新的备忘。
    • 使用 QLabelQLineEdit 添加标题输入框。
    • 使用 QLabelQTextEdit 添加内容输入框。
    • 使用 QLabelQDateTimeEdit 添加提醒时间选择器。
    • 使用 QPushButton 添加“盖章”按钮,点击后会触发 add_memo_item 函数。
  2. add_memo_item() 函数:

    • 创建一个 QListWidgetItem 对象,用于表示一个备忘条目。
    • 使用 setText 设置备忘标题。
    • 使用 setData 将备忘内容和提醒时间分别存储在 Qt.UserRoleQt.UserRole+1 位置。
    • 创建一个“删除”按钮,点击后会触发 delete_memo_item 函数。
    • 将标题标签和删除按钮添加到一个 QHBoxLayout 中,并设置 memo_item 的大小和布局。
    • memo_item 添加到 self.memos 中,self.memos 应该是用来展示所有备忘的 QListWidget
  3. delete_memo_item() 函数:

    • 使用 QMessageBox.question 弹出一个确认框,询问用户是否确认删除。
    • 如果用户确认删除,则使用 self.memos.takeItemself.memos 中删除该备忘条目。
  4. check_reminders() 函数:

    • 获取当前时间。
    • 遍历所有备忘条目。
    • 对于每一个备忘条目,检查其提醒时间是否小于等于当前时间。
    • 如果提醒时间已到,则使用 QMessageBox.information 弹出信息框提醒用户,并从 self.memos 中删除该备忘条目。
    • 使用 break 语句在找到一个需要提醒的备忘后立即停止循环,避免漏提醒。

总结

本代码示例展示了如何使用 Python PyQt 库实现一个简单的备忘录功能,包含添加、删除和提醒功能。可以根据需要进行扩展和修改,例如添加更多功能,例如:

  • 更改备忘内容
  • 设置提醒声音
  • 存储备忘数据到文件或数据库
  • 支持多种提醒类型,例如时间提醒、日期提醒、周期提醒等

希望这篇文章能帮助您理解如何使用 Python PyQt 实现备忘录功能。


原文地址: https://www.cveoy.top/t/topic/oQST 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录