Python 动态显示/隐藏QTextEdit的一部分
在Python 动态显示/隐藏QTextEdit的一部分,python,qt,pyqt,Python,Qt,Pyqt,在pyqt4中,我使用QTextEdit显示一些日志条目。日志输出是HTML,如下所示: <div class="error">Error time and message</div> <div class="warning">Warning time and message</div> Some unclassified test always visible. 错误时间和消息 警告时间和信息 一些未分类的测试总是可见的。 我希望能够动态更改
pyqt4
中,我使用QTextEdit显示一些日志条目。日志输出是HTML,如下所示:
<div class="error">Error time and message</div>
<div class="warning">Warning time and message</div>
Some unclassified test always visible.
错误时间和消息
警告时间和信息
一些未分类的测试总是可见的。
我希望能够动态更改每个日志级别的可见性,该级别由具有指定类的div标识。例如,如何在不手动修改文档内容的情况下使所有带有类警告的div消失?尝试
QTextEdit
是否接受以下类定义:
.warning {
text-color: transparent;
text-size: 0;
}
或类似的
您可以将警告类创建为不可见、非常小甚至零大小!?或者将div的高度设置为0
您可能需要根据需要修改此类定义,并在测试前加上前缀,然后在QTextEdit
中重置它
我不知道这是否真的有效,但这是我能想到的唯一方法。一个QTextDocument
内部使用的QTextEdit
包含QTextBlock
对象,它们有一个setVisible()
方法。尝试将
部分放入单独的文本块中(如果它们还没有;我记得每个
已经分配了自己的块),通过QTextDocument::findBlock()
或类似方法查找它们,并切换可见性
要更改块的可见性,您可能需要解析传入内容一次,可以使用QTextBlock::setUserData()
为每个块设置类提示,或者根据类存储块索引集来构建文档。然后,将文档设置为编辑小部件的内容,并在所有块之间循环以设置视图模式更改时的可见性。但是,您如何识别块的类别?这些块包含文本,而不是html。@是否需要?如果文本具有固定格式(如OP示例),则可以使用块索引;不需要提取类。或者,您可以在构建文档时使用QTextBlock::setUserData()
。当然,这不是一个HTML-ish解决方案,而是一个Qt-ish解决方案,但我怀疑使用HTML/CSS可以解决这个问题。错误日志输出不太可能有固定的顺序,但如果有,您可以使用索引。但可能OP甚至无法控制输出(比如说,因为它来自外部源)。这可能解释了对修改文档内容的限制。