问题:我想为带有其他标签的文字实施文本编辑小部件。 我希望某些标签在某些情况下不可见,这样它们就不会分散用户的注意力。
环境:我正在使用PyQt
,而更喜欢使用QPlainTextWidget
和QSyntaxHighlighter
。
方法:使用QSyntaxHighlighter
我可以为符合我要求的字符串设置QTextCharFormat
。 QTextCharFormat
为我提供了所有字体属性,如大小,颜色等。 但是: 我没有找到隐藏文字或缩小文字大小的选项零。
我不想删除或替换标签,因为这会引入更多代码(复制应包含标签,不能使用QSyntaxHighlighter
根据标签格式化剩余文本)
更新:到目前为止,我发现了一个丑陋的黑客。通过将 QTextFormat :: FontLetterSpacing 设置为较小的值,文本将占用越来越少的空间。结合透明色,文字就像隐形。
问题:在我的测试中,这仅适用于低至0.016%的字母间距。间距下方重置为100%。
答案 0 :(得分:3)
您可以使用基础QTextDocument
来实现此目的。它由块组成,可以使用setVisible
打开和关闭其可见性。使用QTextCursor
插入文本和新块并切换可见性。作为奖励,复制功能无论如何都会复制不可见块的内容。
注意:有关详细信息,请参阅QTextCursor
的{{3}}。在documentation中,据报道,设置可见性不适用于QTextEdits
。
示例:
from PyQt5 import QtWidgets, QtGui
app = QtWidgets.QApplication([])
w = QtWidgets.QPlainTextEdit()
w.show()
t = QtGui.QTextCursor(w.document())
t.insertText('plain text')
t.insertBlock()
t.insertText('tags, tags, tags')
t.block().setVisible(False)
print(w.document().toPlainText())
app.exec_()