Освоение выделения слов в PyQt: подробное руководство с примерами кода

В этой статье блога мы углубимся в мир PyQt и рассмотрим различные методы выделения всех вхождений выбранного слова в приложении Qt. Независимо от того, являетесь ли вы новичком или опытным программистом, это руководство предоставит вам ценную информацию и практические примеры кода, которые помогут вам освоить подсветку слов в PyQt.

Метод 1: QTextEdit и QTextCursor
Один из самых простых способов выделения слов — использование виджета QTextEdit и связанного с ним QTextCursor. Вот фрагмент кода, который поможет вам начать:

# Assuming 'textEdit' is your QTextEdit widget
cursor = textEdit.textCursor()
selected_word = cursor.selectedText()
highlight_format = QTextCharFormat()
highlight_format.setBackground(QColor("yellow"))
while cursor.find(selected_word):
    cursor.mergeCharFormat(highlight_format)

Метод 2: QSyntaxHighlighter
Если вам нужны более продвинутые возможности выделения, класс QSyntaxHighlighter — ваш друг. Он позволяет вам определять собственные правила выделения для определенных слов или шаблонов. Вот пример:

from PyQt5.QtGui import QTextCharFormat, QColor, QSyntaxHighlighter, QTextDocument
class WordHighlighter(QSyntaxHighlighter):
    def __init__(self, parent):
        super().__init__(parent)
        self.highlight_format = QTextCharFormat()
        self.highlight_format.setBackground(QColor("yellow"))
    def highlightBlock(self, text):
        selected_word = self.currentBlock().text()
        if selected_word:
            index = text.indexOf(selected_word, 0, Qt.CaseInsensitive)
            while index >= 0:
                self.setFormat(index, len(selected_word), self.highlight_format)
                index = text.indexOf(selected_word, index + len(selected_word), Qt.CaseInsensitive)

Метод 3: регулярные выражения
Для более гибкого выделения слов регулярные выражения могут стать мощным инструментом. PyQt предоставляет класс QRegularExpression, который можно использовать для сопоставления и выделения слов на основе шаблонов. Вот пример:

from PyQt5.QtCore import QRegularExpression, QRegularExpressionMatch
selected_word = "example"  # Replace with your selected word
highlight_pattern = QRegularExpression(f"\\b{selected_word}\\b", QRegularExpression.CaseInsensitiveOption)
document = textEdit.document()
cursor = document.find(highlight_pattern)
highlight_format = QTextCharFormat()
highlight_format.setBackground(QColor("yellow"))
while not cursor.isNull() and not cursor.atEnd():
    cursor.mergeCharFormat(highlight_format)
    cursor = document.find(highlight_pattern, cursor)

К этому моменту вы должны иметь четкое представление о том, как выделить все вхождения выбранного слова в PyQt. Мы исследовали различные методы: от простого использования QTextEdit и QTextCursor до более продвинутых методов, таких как QSyntaxHighlighter и регулярные выражения. Не стесняйтесь экспериментировать с этими подходами и адаптировать их к вашим конкретным потребностям. Приятного кодирования!