You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
diary/日记应用开发.py

186 lines
6.2 KiB

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_())