qtextedit的html正则,PyQt5 QTextEdit在编辑时进行实时HTML预览

我正在尝试编辑一个名为self.chatTextField的QTextEdit,以实时格式显示HTML预览。例如,如果我执行“”,则希望它不显示标签,而将文本加粗。如果我将textBrowswer用作预览器,则可以完成这项工作,但我希望所有这些都在一个小部件中。

94a831a60619bb0db91b4aa028e0b356.png

正如您在上图中所看到的,我要匹配将HTML显示为最终产品而不是标签的部分。这可能吗?

我尝试了多种方法来转换.toPlainText(),然后添加HTML页眉和页脚。我尝试过.insertHtml()和.setHtml()。我试图用打开和关闭的胡萝卜来做花样,但似乎没有任何效果。我要么只是简单地删除所有HTML(带有胡萝卜/标签的所有内容),要么就会导致递归错误。

这是与更新HTML有关的唯一代码部分。如果您需要更多代码,请告诉我。我也可以提供UI文件。

def printMaster(self):

global my_text

if self.chatTextField.toPlainText() != "":

oldText = self.chatTextField.toPlainText()

newText = self.textBrowser.toPlainText()

if oldText != newText and oldText != my_text:

self.textBrowser.setText(self.chatTextField.toPlainText())

my_text = self.chatTextField.toPlainText()

if my_text.endswith('>'):

#my_text = self.chatTextField.toHtml()

# self.chatTextField.clear()

print(my_text)

# self.chatTextField.setHtml(my_text)

QCoreApplication.processEvents()

# cursor = self.chatTextField.textCursor()

# pos = cursor.selectionEnd()

#

# print(self.chatTextField.toHtml())

#

# my_text = self.chatTextField.toHtml()

#

# self.chatTextField.clear()

# # self.chatTextField.insertHtml(str(my_text))

#

# if my_text.endswith('

# my_text = my_text + "

# self.chatTextField.setHtml(my_text)

# print(True)

# else:

# self.chatTextField.insertHtml(my_text)

#

#

# cursor.setPosition(pos)

#

# self.chatTextField.setTextCursor(cursor)

#

#

# QCoreApplication.processEvents()

#

# # self.chatTextField.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt中的`QSyntaxHighlighter`类可以用于对文本进行语法高亮显示。其实现原理是使用正则表达式匹配文本中的关键字,然后对匹配到的文本进行高亮处理。 以下是一个简单的示例,使用`QSyntaxHighlighter`类实现对Python代码中的关键字进行高亮显示: ```python import sys from PyQt5.QtGui import QColor, QTextCharFormat, QFont, QSyntaxHighlighter from PyQt5.QtWidgets import QApplication, QTextEdit class PythonHighlighter(QSyntaxHighlighter): def __init__(self, parent=None): super(PythonHighlighter, self).__init__(parent) self.highlighting_rules = [] keyword_format = QTextCharFormat() keyword_format.setForeground(QColor(255, 0, 0)) keyword_format.setFontWeight(QFont.Bold) keywords = ["and", "as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "False", "finally", "for", "from", "global", "if", "import", "in", "is", "lambda", "None", "nonlocal", "not", "or", "pass", "raise", "return", "True", "try", "while", "with", "yield"] for word in keywords: pattern = "\\b" + word + "\\b" rule = (pattern, keyword_format) self.highlighting_rules.append(rule) self.number_format = QTextCharFormat() self.number_format.setForeground(QColor(0, 128, 0)) pattern = "\\b[0-9]+\\.?[0-9]*\\b" rule = (pattern, self.number_format) self.highlighting_rules.append(rule) self.string_format = QTextCharFormat() self.string_format.setForeground(QColor(128, 0, 128)) pattern = "\".*\"" rule = (pattern, self.string_format) self.highlighting_rules.append(rule) def highlightBlock(self, text): for pattern, format in self.highlighting_rules: expression = QRegularExpression(pattern) match_iterator = expression.globalMatch(text) while match_iterator.hasNext(): match = match_iterator.next() self.setFormat(match.capturedStart(), match.capturedLength(), format) if __name__ == '__main__': app = QApplication(sys.argv) editor = QTextEdit() highlighter = PythonHighlighter(editor.document()) editor.show() sys.exit(app.exec_()) ``` 上述示例中,定义了一个名为`PythonHighlighter`的类,继承自`QSyntaxHighlighter`类。在`__init__`方法中,定义了三种高亮格式:关键字、数字和字符串。其中关键字的正则表达式使用了`\\b`来限制匹配单词边界,数字的正则表达式使用了`[0-9]+\\.?[0-9]*`,可以匹配整数和小数,字符串的正则表达式使用了`\".*\"`,可以匹配双引号括起来的任意字符串。 在`highlightBlock`方法中,根据预定义的正则表达式规则,对当前文本块中匹配到的文本进行相应的格式设置,从而实现语法高亮显示。最后在主函数中创建一个`QTextEdit`对象,并将其关联到自定义的`PythonHighlighter`对象上,运行程序即可看到效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值