import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5 import QtCore import datetime

class MemoDialog(QDialog): def init(self, parent=None): super(MemoDialog, self).init(parent) self.setWindowTitle('主人,我会提醒你的 喵') self.setWindowModality(Qt.ApplicationModal) self.init_ui()

def init_ui(self):
    # 添加标题
    title_label = QLabel('下旨', self)
    self.title_input = QLineEdit(self)
    self.title_input.setMaxLength(50)

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

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

    # 添加按钮
    add_button = QPushButton('盖章', self)
    add_button.clicked.connect(self.add_memo_item)

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

def add_memo_item(self):
    title = self.title_input.text()
    content = self.content_input.toPlainText()
    time = self.time_edit.dateTime()
    self.parent().add_memo_item(title, content, time)
    self.close()

class CalendarExample(QWidget): def init(self): super(CalendarExample, self).init() self.init_ui() self.memo_items = [] # 存储提醒列表 self.reminder_timer = QTimer() self.reminder_timer.timeout.connect(self.check_reminders) self.reminder_timer.start(1000) self.REMINDER_INTERVAL = 1000 # 提醒定时器间隔时间

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

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

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

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

    self.calendar.clicked[QtCore.QDate].connect(self.show_current_date)
    self.calendar.clicked[QtCore.QDate].connect(self.show_time_difference)

    self.current_date = QLabel(self)
    self.current_date.setText(self.calendar.selectedDate().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.button_delete = QPushButton(self)
    self.button_delete.setText('主人选择事情之后点这个可以删除哦~')
    self.button_delete.clicked.connect(self.delete_memo_item)
    grid.addWidget(self.button_delete, 7, 0, 1, 1)

    # 实时时钟
    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.show_date()

    # 显示时间
    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.show_time)
    self.timer.start(1000)

    # 添加提醒列表
    self.memos = QListWidget(self)
    grid.addWidget(self.memos, 4, 1, 1, 1)
    self.memos.itemClicked.connect(self.delete_memo_item) # 点击提醒列表中的提醒item,可以删除该item


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

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

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

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

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

def add_memo(self):
    memo_dialog = MemoDialog(self)
    memo_dialog.exec_()

def add_memo_item(self, title, content, time):
    memo_item = QListWidgetItem(title)
    memo_item.setData(Qt.UserRole, content)
    memo_item.setData(Qt.UserRole+1, time)
    self.memos.addItem(memo_item)
    self.memo_items.append(memo_item) # 将新添加的提醒item加入列表

def delete_memo_item(self):
    selected_items = self.memos.selectedItems() # 获取所有选中的提醒item
    if not selected_items:
        return
    for item in selected_items:
        self.memos.takeItem(self.memos.row(item))
        self.memo_items.remove(item) # 从列表中移除该提醒item

def check_reminders(self):
    current_time = QDateTime.currentDateTime()
    for item in self.memo_items:
        memo_time = item.data(Qt.UserRole+1)
        if memo_time <= current_time:
            memo_content = item.data(Qt.UserRole)
            QMessageBox.information(self, '嗯嗯~~', memo_content)
            self.memo_items.remove(item) # 在提醒弹窗中删除该提醒item
            self.memos.takeItem(self.memos.row(item)) # 在提醒列表中删除该提醒item

if name == 'main': app = QApplication(sys.argv) demo = CalendarExample() demo.show() sys.exit(app.exec_())


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

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