Python PyQt5 日历程序:带备忘录和提醒功能
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)
# 保存备忘录的 QListWidgetItem 对象
self.memo_items = []
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):
# 创建 QListWidgetItem 对象,并保存起来
item = QListWidgetItem()
item.setData(Qt.UserRole, content)
item.setData(Qt.UserRole+1, time)
item.setText(title)
self.memo_items.append(item)
# 添加到 QListWidget 中
self.memos.addItem(item)
def delete_memo_item(self, item):
self.memos.takeItem(self.memos.row(item))
self.memo_items.remove(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.delete_memo_item(item)
if name == 'main': app=QApplication(sys.argv) demo=CalenderExample() demo.show() sys.exit(app.exec_())
原文地址: https://www.cveoy.top/t/topic/oQX0 著作权归作者所有。请勿转载和采集!