m2j*_*m2j 6 qt syntax-highlighting pyqt qtextdocument qplaintextedit
问题:我想为带有附加标签的文本实现文本编辑小部件.我希望某些标签在某些情况下不可见,这样它们就不会分散用户的注意力.
环境:我正在使用PyQt并且更喜欢使用QPlainTextWidget和QSyntaxHighlighter.
方法:用QSyntaxHighlighter我可以设置QTextCharFormat为符合我的要求,该字符串.QTextCharFormat给了我所有字体属性,如大小,颜色等,但是:我没有找到隐藏文本或将其大小减小到零的选项.
我不想删除或替换标签,因为这会引入更多代码(复制应该包含标签,而不能QSyntaxHighlighter用于根据标签格式化剩余的文本).
更新:到目前为止,我发现了一个丑陋的黑客.通过将QTextFormat :: FontLetterSpacing设置为较小的值,文本将占用越来越少的空间.与透明色相结合,文字就像隐形.
问题:在我的测试中,这仅适用于低至0.016%的字母间距.间距下方重置为100%.
QTextDocument您可以为此使用底层。它由块组成,其可见性可以使用 打开和关闭setVisible。使用 aQTextCursor插入文本和新块并切换可见性。作为奖励,复制功能无论如何都会复制不可见块的内容。
注意:请参阅的文档QTextCursor以获取更多信息。据报道,在另一个问题中设置可见性不起作用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_()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |