qplaintextedit显示html,突出显示QPlainTextEdi中的文本部分

如果突出显示依赖于文本,则@oetzi的解决方案就是所指示的解决方案,因为尽管删除了行,但相同的文本将保持高亮显示,如果高亮显示仅取决于行的位置,则可能的解决方案是使用QSyntaxHighlighter。在

在下面的示例中,您可以输入用空格分隔的整数,这些空格表示将高亮显示的线的位置(位置从0开始):import sys

from PyQt5.QtCore import pyqtSlot, QRegExp

from PyQt5.QtGui import QColor, QRegExpValidator, QSyntaxHighlighter, QTextCharFormat

from PyQt5.QtWidgets import (

QApplication,

QLineEdit,

QPlainTextEdit,

QVBoxLayout,

QWidget,

)

class SyntaxHighlighter(QSyntaxHighlighter):

def __init__(self, parent):

super(SyntaxHighlighter, self).__init__(parent)

self._highlight_lines = dict()

def highlight_line(self, line, fmt):

if isinstance(line, int) and line >= 0 and isinstance(fmt, QTextCharFormat):

self._highlight_lines[line] = fmt

tb = self.document().findBlockByLineNumber(line)

self.rehighlightBlock(tb)

def clear_highlight(self):

self._highlight_lines = dict()

self.rehighlight()

def highlightBlock(self, text):

line = self.currentBlock().blockNumber()

fmt = self._highlight_lines.get(line)

if fmt is not None:

self.setFormat(0, len(text), fmt)

class Widget(QWidget):

def __init__(self, parent=None):

super(Widget, self).__init__(parent)

self._lineedit = QLineEdit(textChanged=self.onTextChanged)

regex_validator = QRegExpValidator(QRegExp(r"[0-9 ]+"))

self._lineedit.setValidator(regex_validator)

self._plaintextedit = QPlainTextEdit()

self._highlighter = SyntaxHighlighter(self._plaintextedit.document())

lay = QVBoxLayout(self)

lay.addWidget(self._lineedit)

lay.addWidget(self._plaintextedit)

for i in range(10):

self._plaintextedit.appendPlainText("line %d" % i)

self.resize(320, 240)

@pyqtSlot(str)

def onTextChanged(self, text):

fmt = QTextCharFormat()

fmt.setBackground(QColor("yellow"))

self._highlighter.clear_highlight()

for e in text.split():

line = int(e)

self._highlighter.highlight_line(line, fmt)

if __name__ == "__main__":

app = QApplication(sys.argv)

w = Widget()

w.show()

sys.exit(app.exec_())

qjmZN.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值