是否可以在用户键入时突出显示文本?

2024-05-20 16:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个输入框,在用户写入文本时突出显示文本

patients = ["AB", "GH", "JS", "LP"]
attributes = ["medication", "weight", "mobility"]
commands = ["get" , "add", "replace", "delete"]

我希望每种类型的单词都有不同的格式

AB添加药物阿司匹林'->;'AB添加药物“阿司匹林”

JS获得药物治疗->JS获取药物

这可能吗?我并不是在寻找能够成功的代码;我只是想知道在我认真投入工作之前它是否可行


Tags: 用户文本getabjsghattributescommands
3条回答

是的,这是可能的,但仅适用于基于QTextDocument的输入小部件,如QPlainTextEdit或QTextEdit,因为基本的单行小部件QLineEdit不支持格式化

您需要创建QSyntaxHighlighter的子类并重写其^{}函数,然后遍历所有组,创建有效的正则表达式并提供相对格式:

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,因此设置字体大小写将不起作用

不幸的是,没有简单的解决方法,因此您需要找到其他方法来突出显示属性

要了解字符格式的可用选项,请参阅QTextCharFormatQTextFormat(它从中继承)的文档,这些文档还提供了setBackgroundsetForeground等有用函数

相关问题 更多 >