import sys import os from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QLabel, QLineEdit, QTextEdit, QPushButton, QMessageBox, QVBoxLayout, QHBoxLayout, QListWidget, QStackedWidget) from PyQt5.QtCore import Qt from datetime import datetime class MainApp(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("日记应用") self.setGeometry(100, 100, 600, 400) self.initUI() def initUI(self): # 创建主窗口的小部件 self.central_widget = QWidget() self.setCentralWidget(self.central_widget) # 创建顶部的功能按钮 self.button_write = QPushButton("写日记") self.button_view = QPushButton("查看日记") self.button_delete = QPushButton("删除日记") self.button_write.clicked.connect(self.show_write_diary) self.button_view.clicked.connect(self.show_view_diary) self.button_delete.clicked.connect(self.show_delete_diary) # 布局顶部的按钮 top_layout = QHBoxLayout() top_layout.addWidget(self.button_write) top_layout.addWidget(self.button_view) top_layout.addWidget(self.button_delete) # 创建堆叠小部件 self.stacked_widget = QStackedWidget() self.stacked_widget.addWidget(self.create_write_diary_widget()) self.stacked_widget.addWidget(self.create_view_diary_widget()) self.stacked_widget.addWidget(self.create_delete_diary_widget()) # 设置主布局 main_layout = QVBoxLayout() main_layout.addLayout(top_layout) main_layout.addWidget(self.stacked_widget) self.central_widget.setLayout(main_layout) #写日记 def create_write_diary_widget(self): widget = QWidget() label_date = QLabel("日期:") self.entry_date = QLineEdit() label_title = QLabel("标题:") self.entry_title = QLineEdit() label_content = QLabel("内容:") self.text_content = QTextEdit() label_mood = QLabel("心情:") self.entry_mood = QLineEdit() button_save = QPushButton("保存") button_save.clicked.connect(self.save_diary) button_clear = QPushButton("清空") button_clear.clicked.connect(self.clear_entries) layout = QVBoxLayout() layout.addWidget(label_date) layout.addWidget(self.entry_date) layout.addWidget(label_title) layout.addWidget(self.entry_title) layout.addWidget(label_content) layout.addWidget(self.text_content) layout.addWidget(label_mood) layout.addWidget(self.entry_mood) layout.addWidget(button_save) layout.addWidget(button_clear) widget.setLayout(layout) return widget #查看日记 def create_view_diary_widget(self): widget = QWidget() self.diary_list = QListWidget() self.diary_list.itemClicked.connect(self.display_diary) self.diary_display = QTextEdit() self.diary_display.setReadOnly(True) layout = QHBoxLayout() layout.addWidget(self.diary_list, 1) layout.addWidget(self.diary_display, 2) widget.setLayout(layout) return widget #删除日记 def create_delete_diary_widget(self): widget = QWidget() self.delete_diary_list = QListWidget() self.delete_diary_list.itemClicked.connect(self.confirm_delete_diary) layout = QVBoxLayout() layout.addWidget(self.delete_diary_list) widget.setLayout(layout) return widget def show_write_diary(self): self.stacked_widget.setCurrentIndex(0) def show_view_diary(self): self.update_diary_list() self.stacked_widget.setCurrentIndex(1) def show_delete_diary(self): self.update_delete_diary_list() self.stacked_widget.setCurrentIndex(2) def save_diary(self): date = self.entry_date.text() title = self.entry_title.text() content = self.text_content.toPlainText() mood = self.entry_mood.text() if not date or not title or not content: QMessageBox.warning(self, "错误", "日期、标题和内容不能为空") return current_time = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") file_name = f"{current_time}.txt" with open(file_name, "w") as f: f.write(f"日期:{date}\n") f.write(f"标题:{title}\n") f.write(f"内容:{content}\n") f.write(f"心情:{mood}\n\n") reply = QMessageBox.question(self, "提示", f"日记保存成功:{file_name}\n是否继续写日记?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: self.clear_entries() else: self.close() def clear_entries(self): self.entry_date.clear() self.entry_title.clear() self.text_content.clear() self.entry_mood.clear() def update_diary_list(self): self.diary_list.clear() for file_name in os.listdir(): if file_name.endswith(".txt"): self.diary_list.addItem(file_name) def display_diary(self, item): with open(item.text(), "r") as f: content = f.read() self.diary_display.setText(content) def update_delete_diary_list(self): self.delete_diary_list.clear() for file_name in os.listdir(): if file_name.endswith(".txt"): self.delete_diary_list.addItem(file_name) def confirm_delete_diary(self, item): reply = QMessageBox.question(self, "确认", f"确定要删除日记:{item.text()}?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: os.remove(item.text()) self.update_delete_diary_list() if __name__ == "__main__": app = QApplication(sys.argv) window = MainApp() window.show() sys.exit(app.exec_())