Подсветка синтаксиса, как подсветить то, что находится в кавычках?
Мой код:
from PyQt5.QtWidgets import QApplication, QTextEdit
from PyQt5.QtGui import QSyntaxHighlighter, QTextCharFormat, QFont, QPainter, QColor, QPaintEngine
from PyQt5.QtCore import Qt, QRegularExpression
class MyHighlighter(QSyntaxHighlighter):
def highlightBlock(self, text):
char_format = QTextCharFormat(); char_format.setForeground(QColor(100, 90, 32)) #Q text format
expression = QRegularExpression(r"\b(print)\b")
_001 = expression.globalMatch(text)
while _001.hasNext():
match = _001.next()
self.setFormat(match.capturedStart(), match.capturedLength(), char_format)
if __name__ == '__main__':
app = QApplication([])
mw = QTextEdit()
mw.setText("")
highlighter = MyHighlighter(mw.document())
mw.show()
app.exec()
Так как сделать подсветку в кавычках?
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант.
import sys
import re
from PyQt5.Qt import *
class Highlighter(QSyntaxHighlighter):
def __init__(self, parent=None):
super().__init__(parent)
self._mapping = {}
def add_mapping(self, pattern, pattern_format):
self._mapping[pattern] = pattern_format
def highlightBlock(self, text_block):
for pattern, fmt in self._mapping.items():
for match in re.finditer(pattern, text_block):
start, end = match.span()
self.setFormat(start, end-start, fmt)
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setStyleSheet('QWidget {font-size: 20px;}')
self.highlighter = Highlighter()
self.setUpEditor()
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.editor)
def setUpEditor(self):
class_format = QTextCharFormat()
class_format.setForeground(Qt.blue)
class_format.setFontWeight(QFont.Bold)
pattern = r'^\s*class\s+\w+\(.*$'
self.highlighter.add_mapping(pattern, class_format)
function_format = QTextCharFormat()
function_format.setForeground(Qt.red)
function_format.setFontItalic(True)
pattern = r'^\s*def\s+\w+\s*\(.*\)\s*:\s*$'
self.highlighter.add_mapping(pattern, function_format)
comment_format = QTextCharFormat()
comment_format.setBackground(QColor("#ADFF2F"))
pattern = r"\"[^\"]*\""
self.highlighter.add_mapping(pattern, comment_format)
comment_format = QTextCharFormat()
comment_format.setBackground(QColor("#ADFF2F"))
pattern = r"'[^\']*\'"
self.highlighter.add_mapping(pattern, comment_format)
self.editor = QPlainTextEdit()
font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
self.editor.setFont(font)
self.highlighter.setDocument(self.editor.document())
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyApp()
w.resize(800, 500)
w.show()
sys.exit(app.exec_())
