import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self): super().__init__() self.open_save_file_flags = None self.setup_ui() def setup_ui(self): self.setWindowTitle("[*]文本编辑器") self.resize(600, 500) self.label = QLabel(self) self.label.resize(self.width(), 30) self.label.setStyleSheet("background-color:cyan") self.push_button_open = QPushButton(self) self.push_button_open.setText("show打开") self.push_button_open.move(30, 50) self.push_button_get_open_file = QPushButton(self) self.push_button_get_open_file.setText("getOpenFile打开") self.push_button_get_open_file.move(130, 50) self.push_button_save = QPushButton(self) self.push_button_save.setText("show保存") self.push_button_save.move(250, 50) self.push_button_get_save_file = QPushButton(self) self.push_button_get_save_file.setText("getSaveFile保存") self.push_button_get_save_file.move(350, 50) self.text_edit = QTextEdit(self) self.text_edit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.text_edit.resize(self.width() - 6, 397) self.text_edit.move(3, 100) self.push_button_activities() def push_button_activities(self): def push_button_open_clicked(): self.open_save_file_flags = 1 self.dialogue_func() self.file_dialogue.show() self.dialogue_activities() self.push_button_open.clicked.connect(push_button_open_clicked) def push_button_get_open_file_clicked(): self.file_result = QFileDialog.getOpenFileName(self, "文件选择", "./", "文本文件(*.txt)") if self.file_result[0] != "": self.label.setText(f"打开文件:{self.file_result}") self.file_selected_path = self.file_result[0] self.file_name = self.file_selected_path.split("/")[-1] self.open_file() else: self.label.setText(f"打开文件:未选择文件") self.push_button_get_open_file.clicked.connect(push_button_get_open_file_clicked) def push_button_save_clicked(): self.open_save_file_flags = 2 self.dialogue_func() self.file_dialogue.show() self.dialogue_activities() self.push_button_save.clicked.connect(push_button_save_clicked) def push_button_get_save_file_clicked(): self.file_result = QFileDialog.getSaveFileName(self, "文件选择", "./", "文本文件(*.txt)") if self.file_result[0] != "": self.label.setText(f"保存文件:{self.file_result}") self.file_selected_path = self.file_result[0] self.file_name = self.file_selected_path.split("/")[-1] self.save_file() else: self.label.setText(f"打开文件:未选择文件") self.push_button_get_save_file.clicked.connect(push_button_get_save_file_clicked) def dialogue_func(self): self.file_dialogue = QFileDialog(self) if self.open_save_file_flags == 1: self.file_dialogue.setAcceptMode(QFileDialog.AcceptOpen) self.file_dialogue.setFileMode(QFileDialog.ExistingFile) elif self.open_save_file_flags == 2: self.file_dialogue.setAcceptMode(QFileDialog.AcceptSave) self.file_dialogue.setWindowTitle("文件选择") self.file_dialogue.setWindowModality(Qt.WindowModal) self.file_dialogue.setDirectory(QDir("./")) self.file_dialogue.setNameFilter("文本文件(*.txt)") def dialogue_activities(self): self.file_dialogue.accepted.connect(lambda: self.label.setText( f"接受 结果:{self.file_dialogue.result()} 最终文件:{self.file_dialogue.selectedFiles()}")) self.file_dialogue.rejected.connect(lambda: self.label.setText( f"拒绝 结果:{self.file_dialogue.result()} 当前文件:{self.file_dialogue.selectedFiles()}")) def current_changed(file): self.label.setText(f"当前文件:{file}") self.file_dialogue.currentChanged.connect(current_changed) def file_selected_exec(file): self.file_selected_path = file self.file_name = self.file_selected_path.split("/")[-1] if self.open_save_file_flags == 1: self.open_file() self.open_save_file_flags = None elif self.open_save_file_flags == 2: self.save_file() self.open_save_file_flags = None self.file_dialogue.fileSelected.connect(file_selected_exec) def open_file(self): self.open_file_handle = open(self.file_selected_path, mode="r", encoding="utf-8") self.setWindowTitle(f"文本编辑器-[*]{self.file_name}") self.text_edit.setPlainText(self.open_file_handle.read()) self.setWindowModified(False) self.text_edit.textChanged.connect(lambda: self.setWindowModified(True)) self.open_file_handle.close() def save_file(self): self.open_for_write_file_handle = open(self.file_selected_path, mode="w", encoding="utf-8") self.setWindowTitle(f"文本编辑器-[*]{self.file_name}") self.open_for_write_file_handle.write(self.text_edit.toPlainText()) self.setWindowModified(False) self.open_for_write_file_handle.close() if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())