PySide6学习笔记--QSyntaxHighlighter简单实现-关键字高亮

目录

简述

自定义的QSyntaxHighlighter

主窗体

运行结果

注意 

参考


简述

要实现自己所需要的相关高亮显示(例如,关键字高亮,搜索背景色,注释,等等其他),可继承QSyntaxHighlighter,并且实现highlightBlock(self, text)函数,将待定文档对象传入即可。本文仅仅作为,简单的展示关键字高亮,及背景色设置的笔记而已,代码可能会有冗余等等。

自定义的QSyntaxHighlighter

KEY_WORD = '(\\bdef\\b|\\bclass\\b)'  # 待定关键字高亮显示
class MyHigh(QSyntaxHighlighter):  # 继承 QSyntaxHighlighter
    def __init__(self, parent=None, condition=None):
        super().__init__(parent)
        self.condition = condition  # 传入的搜索条件
    def highlightBlock(self, text):
        fmt1 = QTextCharFormat()  # 文本格式
        fmt1.setBackground(Qt.GlobalColor.yellow)  # 背景色
        fmt2 = QTextCharFormat()
        fmt2.setForeground(Qt.GlobalColor.blue)  # 前景色
        exp1 = QRegularExpression(self.condition)  # 搜索条件一
        exp2 = QRegularExpression(KEY_WORD)  # 搜索条件二
        match2 = exp2.globalMatch(text)  # 全局匹配搜索
        while match2.hasNext():  # 是否搜索到,没有就退出
            obj = match2.next()  # 下一个, 有就继续
            self.setFormat(obj.capturedStart(), obj.capturedLength(), fmt2)  # 自动填充格式
        # 条件二要在条件一之前,否则被覆盖
        match1 = exp1.globalMatch(text)
        while match1.hasNext():
            obj = match1.next()
            self.setFormat(obj.capturedStart(), obj.capturedLength(), fmt1)

主窗体

# 工具常量
WIN_WIDTH = 600
WIN_HEIGHT = 400
# 工具函数
def move_center(widget, width, height):  # 窗口居中
    w = QGuiApplication.primaryScreen().size().width()
    h = QGuiApplication.primaryScreen().size().height()
    widget.setGeometry((w - width) / 2, (h - height) / 2, width, height)
# 主窗体
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('学习笔记')
        move_center(self, WIN_WIDTH, WIN_HEIGHT)  # 居中
        layout = QVBoxLayout()
        line = QLineEdit()
        self.t = QTextEdit()
        self.get_font(self.t)  # 字体设置
        MyHigh(self.t.document())  # 将文档对象传入自定义的QSyntaxHighlighter
        layout.addWidget(line)
        layout.addWidget(self.t)
        self.setLayout(layout)
        line.textChanged.connect(self.do_search)  # 文本改变操作
    def do_search(self, txt):
        MyHigh(self.t, txt)  # textChanged带有文本参数,直接传入自定义condition
    def get_font(self, txt: QTextEdit) -> None:  # 辅助函数,简单处理字体
        font = QFont()
        font.setFamily('consolas')  # 字形
        font.setPointSize(30)  # 大小
        font.setItalic(True)  # 斜体
        font.setBold(True)  # 粗体
        txt.setFont(font)

运行结果

注意 

没有处理大小写,只需要对搜索关键字和条件,进行upper()或是lower()即可。

参考

QSyntaxHighlighter

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值