You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动