从带有富文本的QLabel中获取纯文本

10
我有一个包含富文本的QLabel,我想从中提取实际(可见)的“文本”,而不包括格式化的代码。我需要类似于其他Qt Widgets'.toPlainText'方法的函数。
我不能简单地调用.text()并像在Get plain text from QString with HTML tags这个线程中建议的那样操纵html标签的字符串,因为返回的QString包含所有的<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 的无意义内容。
我该如何提取纯文本?
(我可以接受任何方法,即使是间接的。例如:将html转换为纯文本的预定义函数)
谢谢!
规格:
python 2.7.2
PyQt4
Windows 7

我自己没有尝试过,但看起来 QTextCodec 是你需要的(文档在 http://developer.qt.nokia.com/doc/qt-4.8/qtextcodec.html)。 - TonyK
RTF 似乎不是一种受支持的编码(除非我漏掉了什么)。没关系,我找到了一个凌乱的解决方法。 - Anti Earth
你不能把Qt富文本视为HTML吗?这里的Qt文档(http://doc.qt.nokia.com/4.7-snapshot/qml-text.html)说:“富文本使用类似HTML的标记定义。” - TonyK
耶!(QTextCodec支持HTML吗?我假设是这样的,因为如果GUI框架支持它,那么这是很合理的。我对这整个“标记”、文本格式业务并不是很了解!抱歉。) - Anti Earth
2个回答

21

使用 QTextDocument 进行转换:

doc = QtGui.QTextDocument()
doc.setHtml(label.text())
text = doc.toPlainText()

哦,比我的方法更直接。我错过了这个,感到有些尴尬 :| - Anti Earth

2
这里有一个不太正式的解决方法(适用于Python - PyQt)。
def Extract_PlainText(label):
    Rtf_text = label.text()
    Temp_Obj = QtGui.QTextEdit()
    Temp_Obj.setText(Rtf_text)
    Plain_text = Temp_Obj.toPlainText()
    del Temp_Obj
    return Plain_text

灵感来自 http://bytes.com/topic/net/answers/707370-convert-rtf-plain-text

这篇文章是关于如何将RTF文本转换成普通文本的。

当然,'del Temp_Obj'是完全不必要的,但我觉得它很古雅。 - Anti Earth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接