是否可以在用户键入时突出显示文本?
Is it possible to highlight text as the user types?
我正在尝试创建一个在用户输入文本时突出显示文本的输入框。
patients = ["AB", "GH", "JS", "LP"]
attributes = ["medication", "weight", "mobility"]
commands = ["get" , "add", "replace", "delete"]
我希望它能以不同的方式格式化每种类型的单词,例如
AB 添加药物阿司匹林' -> 'AB 添加 药物“阿司匹林”'
JS 得到药物 -> JS 得到 药物
这可能吗?我不一定要寻找可以实现它的代码;我只是想知道它是否可行,然后再投入认真的时间进行研究。
是的,这是可能的,但仅适用于基于 QTextDocument 的输入小部件,例如 QPlainTextEdit 或 QTextEdit,因为基本的单行小部件 QLineEdit 不支持格式化。
您需要创建一个 QSyntaxHighlighter and override its highlightBlock()
函数的子类,然后循环遍历所有组,创建一个有效的正则表达式并提供相关格式:
def highlightBlock(self, text):
fmt = QtGui.QTextCharFormat()
fmt.setFontWeight(QtGui.QFont.Bold)
patientList = '|'.join('({})'.format(v) for v in patients)
patientRegEx = QtCore.QRegularExpression(
r'\b({})\b'.format(patientList)
)
rxIter = QtCore.QRegularExpressionMatchIterator(
patientRegEx.globalMatch(text))
while rxIter.hasNext():
match = rxIter.next()
self.setFormat(
match.capturedStart(),
match.capturedLength(),
fmt)
然后在文档上设置荧光笔以进行文本编辑:
self.inputField = QTextEdit()
self.highlighter = MySyntaxHighlighter(self.inputField.document())
请注意,语法高亮显示中似乎有一个已知且未解决的 bug,因此设置字体大写 不会 起作用。
不幸的是,没有简单的解决方法,因此您需要找到其他方法来突出显示属性。
要了解可用于字符格式的选项,请参阅 QTextCharFormat and also QTextFormat(它从中继承)的文档,其中还提供了有用的函数,例如 setBackground
和 setForeground
。
我正在尝试创建一个在用户输入文本时突出显示文本的输入框。
patients = ["AB", "GH", "JS", "LP"]
attributes = ["medication", "weight", "mobility"]
commands = ["get" , "add", "replace", "delete"]
我希望它能以不同的方式格式化每种类型的单词,例如
AB 添加药物阿司匹林' -> 'AB 添加 药物“阿司匹林”'
JS 得到药物 -> JS 得到 药物
这可能吗?我不一定要寻找可以实现它的代码;我只是想知道它是否可行,然后再投入认真的时间进行研究。
是的,这是可能的,但仅适用于基于 QTextDocument 的输入小部件,例如 QPlainTextEdit 或 QTextEdit,因为基本的单行小部件 QLineEdit 不支持格式化。
您需要创建一个 QSyntaxHighlighter and override its highlightBlock()
函数的子类,然后循环遍历所有组,创建一个有效的正则表达式并提供相关格式:
def highlightBlock(self, text):
fmt = QtGui.QTextCharFormat()
fmt.setFontWeight(QtGui.QFont.Bold)
patientList = '|'.join('({})'.format(v) for v in patients)
patientRegEx = QtCore.QRegularExpression(
r'\b({})\b'.format(patientList)
)
rxIter = QtCore.QRegularExpressionMatchIterator(
patientRegEx.globalMatch(text))
while rxIter.hasNext():
match = rxIter.next()
self.setFormat(
match.capturedStart(),
match.capturedLength(),
fmt)
然后在文档上设置荧光笔以进行文本编辑:
self.inputField = QTextEdit()
self.highlighter = MySyntaxHighlighter(self.inputField.document())
请注意,语法高亮显示中似乎有一个已知且未解决的 bug,因此设置字体大写 不会 起作用。
不幸的是,没有简单的解决方法,因此您需要找到其他方法来突出显示属性。
要了解可用于字符格式的选项,请参阅 QTextCharFormat and also QTextFormat(它从中继承)的文档,其中还提供了有用的函数,例如 setBackground
和 setForeground
。