import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import*
from PyQt5.QtCore import QDate, QDateTime, Qt
from PyQt5 import QtCore
import time
import datetime

class CalenderExample(QWidget):
    def __init__(self):
        super(CalenderExample,self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('我的超级无敌小日历')
        grid = QGridLayout()

        '创建日历控件对象'
        self.calender_ = QCalendarWidget(self)
        self.calender_.setGridVisible(True)
        self.calender_.setMinimumDate(QDate(1970,1,1))
        self.calender_.setMaximumDate(QDate(3200,1,1))
        grid.addWidget(self.calender_,4,0, 1, 1)

        self.current_date_ = QLabel(self)
        self.current_date_.setText('大人你选的日子是')
        grid.addWidget(self.current_date_, 0, 0, 1, 1)

        self.time_difference = QLabel(self)
        self.time_difference.setText('和您现在的日子差:')
        grid.addWidget(self.time_difference, 3, 0, 1, 1)

        self.calender_.clicked[QtCore.QDate].connect(self.calender_show)
        self.calender_.clicked[QtCore.QDate].connect(self.show_difference)

        self.current_date=QLabel(self)
        date=self.calender_.selectedDate()
        self.current_date.setText(date.toString('yyyy-MM-dd'))
        grid.addWidget(self.current_date, 2, 0, 1, 1)

        self.setGeometry(100,100,100,100)

        self.memo = QTextEdit(self)
        self.memo.setGeometry(30, 10, 30, 20)
        grid.addWidget(self.memo, 4, 2, 1, 1)

        #回到今天
        self.button_today = QPushButton(self)
        self.button_today.setText('速速回到今天')
        self.button_today.clicked.connect(self.go_to_today)
        grid.addWidget(self.button_today, 5, 0, 1, 1)

        #备忘录
        self.button_memo = QPushButton(self)
        self.button_memo.setText('主人想要记录点东西吗')
        self.button_memo.clicked.connect(self.add_memo)
        grid.addWidget(self.button_memo, 6, 0, 1, 1)

        #指令返回
        self.calender_.clicked[QtCore.QDate].connect(self.calender_show)
        self.calender_.clicked[QtCore.QDate].connect(self.show_difference)
        date=self.calender_.selectedDate()

        #3实时时钟
        self.label_date = QLabel(self)
        self.label_date.move(20,100)
        self.label_date.setFixedHeight(30)
        self.label_date.setFont(QFont('Arial', 10))
        grid.addWidget(self.label_date, 10, 0, 1, 1)

        # 显示日期
        self.showDate()

        # 显示时间
        self.label_time = QLabel(self)
        self.label_time.move(20,100)
        self.label_time.setFont(QFont('Arial', 26))
        palette = QPalette()
        brush = QBrush(QColor(200, 100, 0))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Active, QPalette.WindowText, brush)
        self.label_time.setPalette(palette)
        self.label_time.setFixedHeight(60)
        grid.addWidget(self.label_time, 11, 0, 1, 1)

        self.setLayout(grid)

        # 添加定时器
        self.timer = QTimer()
        self.timer.timeout.connect(self.showTime)
        self.timer.start(1000)

        # 添加提醒列表
        self.memos = QListWidget(self)
        grid.addWidget(self.memos, 4, 1, 1, 1)

        # 添加提醒定时器
        self.reminder_timer = QTimer()
        self.reminder_timer.timeout.connect(self.check_reminders)
        self.reminder_timer.start(1000)

    def calender_show(self,date):
        self.current_date.setText(date.toString('yyyy-MM-dd'))

    def show_difference(self, date):
        date1 = self.calender_.selectedDate()
        if date1.isValid():
            datetime1 = QDateTime(date1)
            seconds_difference = abs(datetime1.toSecsSinceEpoch() -QDateTime.currentDateTime().toSecsSinceEpoch())
            days_difference = seconds_difference // (24 * 3600)
            self.time_difference.setText('和您现在的日子差:%d天' % days_difference)
        else:
            self.time_difference.setText('和您现在的日子差:')

    def showDate(self):
        date = QDate.currentDate()
        self.label_date.setText(date.toString('yyyy年MM月dd日'))

    def showTime(self):
        time = QTime.currentTime()
        self.label_time.setText(time.toString('hh:mm:ss'))

    def go_to_today(self):
        today = QDate.currentDate()
        self.calender_.setSelectedDate(today)

    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):
        if title and content:
            memo_item = QListWidgetItem()
            memo_item.setText(title)
            memo_item.setData(Qt.UserRole, content)
            memo_item.setData(Qt.UserRole, time)  # 使用Qt.UserRole,而不是Qt.UserRole+1

            # 添加删除按钮
            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.setLayout(layout)  # 将布局添加到QListWidgetItem

            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)  # 使用item方法获取备忘录项
            memo_time = memo_item.data(Qt.UserRole)
            if memo_time <= current_time:
                memo_content = memo_item.data(Qt.UserRole)
                QMessageBox.information(self, '嗯嗯~~', memo_content)
                self.memos.takeItem(i)

if __name__ == '__main__':
    app=QApplication(sys.argv)
    demo=CalenderExample()
    demo.show()
    sys.exit(app.exec_())

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

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