|
发表于 2024-4-2 10:17:45
|
显示全部楼层
当然可以将这两个函数整合到上述代码中。下面是一个整合后的示例代码:import osfrom PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialogfrom PySide6.QtCore import Qt, QThread, Signalclass TextEditThread(QThread): text_changed = Signal(str) def __init__(self, file_path): super().__init__() self.file_path = file_path def run(self): if not os.path.isfile(self.file_path): self.text_changed.emit("文件不存在!") return base_name = os.path.basename(self.file_path) file_ext = os.path.splitext(base_name)[1] if file_ext != '.txt': self.text_changed.emit("请选择txt格式的文件!") return with open(self.file_path, "r") as f: content = f.read() self.text_changed.emit(content)class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Text Editor") self.text_edit = QTextEdit() self.open_button = QPushButton("Open") self.save_button = QPushButton("Save") self.open_button.clicked.connect(self.open_file) self.save_button.clicked.connect(self.save_file) layout = QVBoxLayout() layout.addWidget(self.text_edit) layout.addWidget(self.open_button) layout.addWidget(self.save_button) central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) def open_file(self): file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt") if file_path: self.thread = TextEditThread(file_path) self.thread.text_changed.connect(self.update_text) self.thread.start() def update_text(self, content): self.text_edit.setPlainText(content) def save_file(self): file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "*.txt") if file_path: with open(file_path, "w") as f: content = self.text_edit.toPlainText() f.write(content)app = QApplication()window = MainWindow()window.show()app.exec()在上述代码中,我们将`process_file()`函数整合为`TextEditThread`线程类的`run()`方法。在`run()`方法中,我们首先检查文件是否存在,并验证文件扩展名是否为.txt。然后读取文件内容并通过信号将其发送给主线程更新QTextEdit的文本显示。这样,当用户选择并打开一个txt文件时,会在新的线程中执行读取文件的操作,并将结果传递给主线程更新TextEdit的文本内容。请注意,在这个例子中,我们将文件路径的验证与线程的执行合并在一起,以确保只有合法的txt文件被读取和显示。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|