案例7-4升级版日记本
时间: 2024-02-17 21:36:36 浏览: 188
为了升级案例7-3的日记本,我们可以加入一些新的功能,如日期选择器、关键词搜索等。
首先,我们可以使用PyQt5中的QCalendarWidget类来添加日期选择器。我们还可以添加一个搜索框和按钮,以便用户可以按关键词搜索他们的日记。这需要使用QLineEdit和QPushButton类。
在主窗口中,我们可以创建一个垂直布局,并将QCalendarWidget、QLineEdit、QPushButton和QTextEdit添加到其中。这将使用户能够选择日期、输入关键词并搜索日记,然后在QTextEdit中查看结果。
我们还可以添加一个菜单栏,以便用户可以保存和打开他们的日记。这需要使用QMenuBar、QMenu和QAction类。
最后,我们可以将日记保存为文本文件,并使用QFileDialog类选择文件的保存位置。当用户打开日记时,我们将使用QFileDialog类选择文件的位置,并将其加载到QTextEdit中。
以下是一个简单的代码示例:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget, QVBoxLayout, QLineEdit, QPushButton, QTextEdit, QMenuBar, QMenu, QAction, QFileDialog
from datetime import datetime
class Diary(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('日记本')
self.setGeometry(100, 100, 800, 600)
# 创建菜单栏
menubar = self.menuBar()
fileMenu = menubar.addMenu('文件')
# 创建菜单项
saveAction = QAction('保存日记', self)
saveAction.triggered.connect(self.saveDiary)
fileMenu.addAction(saveAction)
openAction = QAction('打开日记', self)
openAction.triggered.connect(self.openDiary)
fileMenu.addAction(openAction)
# 创建布局
layout = QVBoxLayout()
# 添加日历控件
self.calendar = QCalendarWidget()
self.calendar.clicked.connect(self.showDiary)
layout.addWidget(self.calendar)
# 添加搜索框和按钮
searchLayout = QHBoxLayout()
self.searchBox = QLineEdit()
self.searchButton = QPushButton('搜索')
self.searchButton.clicked.connect(self.searchDiary)
searchLayout.addWidget(self.searchBox)
searchLayout.addWidget(self.searchButton)
layout.addLayout(searchLayout)
# 添加文本框
self.textEdit = QTextEdit()
layout.addWidget(self.textEdit)
# 设置主窗口的中心部分
centralWidget = QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
def saveDiary(self):
fileName, _ = QFileDialog.getSaveFileName(self, '保存日记', '', 'Text Files (*.txt)')
if fileName:
with open(fileName, 'w') as f:
f.write(self.textEdit.toPlainText())
def openDiary(self):
fileName, _ = QFileDialog.getOpenFileName(self, '打开日记', '', 'Text Files (*.txt)')
if fileName:
with open(fileName, 'r') as f:
self.textEdit.setPlainText(f.read())
def showDiary(self):
date = self.calendar.selectedDate()
fileName = date.toString('yyyy-MM-dd') + '.txt'
try:
with open(fileName, 'r') as f:
self.textEdit.setPlainText(f.read())
except FileNotFoundError:
self.textEdit.setPlainText('')
def searchDiary(self):
keyword = self.searchBox.text()
if keyword:
result = ''
for year in range(2000, datetime.now().year+1):
for month in range(1, 13):
for day in range(1, 32):
try:
with open(f'{year}-{month:02d}-{day:02d}.txt', 'r') as f:
content = f.read()
if keyword in content:
result += f'{year}-{month:02d}-{day:02d}\n{content}\n\n'
except FileNotFoundError:
pass
if result:
self.textEdit.setPlainText(result)
else:
self.textEdit.setPlainText('未找到相关日记。')
else:
self.showDiary()
if __name__ == '__main__':
app = QApplication([])
diary = Diary()
diary.show()
app.exec_()
```
在这个例子中,我们添加了一个菜单栏,其中包含保存和打开日记的选项。我们还使用了QCalendarWidget、QLineEdit和QPushButton类添加了一些新的控件。最后,我们将日记保存为文本文件,并使用QFileDialog类选择文件的位置。
阅读全文