PyQt5如何保存textEdit富文本并保留字体颜色等格式
解决QTextEdit保存富文本格式丢失的问题
嘿,我一眼就看出问题所在了——你用toPlainText()的话,肯定会丢掉所有格式!这个方法本来就是专门用来提取无格式纯文本的,所以保存后的RTF文件自然没有字体颜色、字号、加粗这些样式。
要保存带格式的RTF文件,Qt给我们提供了更专业的工具,不用自己手动处理复杂的RTF语法。下面是修改后的代码,完美解决你的问题:
def savefl(self): try: filey = QtWidgets.QFileDialog.getSaveFileName(self,"Save","","Rich Text File (*.rtf);;Text File(*.txt);;All Files (*.*)") file_path = filey[0] # 处理用户取消保存的情况 if not file_path: return # 根据文件后缀选择保存方式 if file_path.endswith('.rtf'): # 使用QTextDocumentWriter保存富文本格式 writer = QtGui.QTextDocumentWriter(file_path) # 指定保存格式为RTF writer.setFormat(QtCore.QByteArray(b"rtf")) # 写入整个文档(包含所有格式) writer.write(self.textEdit.document()) else: # 其他格式依然用纯文本保存 with open(file_path, "w", encoding="utf-8") as file2: file2.write(self.textEdit.toPlainText()) except (FileNotFoundError,FileExistsError): pass
关键修改点说明:
- 替换了纯文本提取方法:用
QTextDocumentWriter替代toPlainText(),它会完整保留QTextEdit中的所有格式信息 - 格式判断逻辑:根据用户选择的文件后缀自动切换保存方式,RTF用富文本模式,其他格式保持原有的纯文本逻辑
- 增加了异常处理:补充了用户取消保存时的空路径判断,避免报错
如果之后你需要保存HTML格式的富文本文件,只需要把setFormat的参数改成b"html"就可以了,这个工具非常灵活。
内容的提问来源于stack exchange,提问作者RavenHunter




