Не работает применение формата к текущему символу в библиотеке pyqt6.8

Есть код на pyqt6.8:

def toggle_bold(self):
    cursor = self.text_edit.textCursor()
    cursor.beginEditBlock()  # Начинаем блок редактирования
    try:
        if cursor.hasSelection():
            start = cursor.selectionStart()
            end = cursor.selectionEnd()
            # Перебираем каждый символ в выделении
            for i in range(start, end):
                cursor.setPosition(i)  # Устанавливаем курсор на текущую позицию
                fmt = cursor.charFormat()  # Получаем формат текущего символа
                # Переключаем жирный стиль
                fmt.setFontWeight(QFont.Weight.Bold if fmt.font().weight() != QFont.Weight.Bold else QFont.Weight.Normal)
                cursor.mergeCharFormat(fmt)  # Применяем формат к символу
            cursor.setPosition(end)  # Возвращаем курсор в конец выделения
        else:
            fmt = cursor.charFormat()
            fmt.setFontWeight(QFont.Weight.Bold if fmt.font().weight() != QFont.Weight.Bold else QFont.Weight.Normal)
            cursor.mergeCharFormat(fmt)  # Применяем формат к текущему символу
    finally:
        cursor.endEditBlock()  # Завершаем блок редактирования
    self.update_format()  # Обновляем состояние кнопок




def update_format(self):
    """Обновляет состояние кнопок и полей в зависимости от форматирования текста под курсором."""
    cursor = self.text_edit.textCursor()
    
    if cursor.hasSelection():
        # Если текст выделен, выводим "11"
        pass
    else:
        # Если текст не выделен, обновляем формат
        fmt = cursor.charFormat()
        font = fmt.font()
        self.font_combo.setCurrentFont(font)

        # Устанавливаем размер шрифта
        self.size_spinbox.setValue(font.pointSize())

        # Обновляем состояние кнопок
        self.bold_button.setChecked(font.bold())
        self.italic_button.setChecked(font.italic())
        self.underline_button.setChecked(font.underline())
        self.strike_button.setChecked(font.strikeOut())

Этот код должен перебирать каждый символ из выделенного текста и задавать ему стиль bold. Когда я накладываю стиль сразу на текст, то все работает, а если по символам, то нет. То есть, все работает (циклы, само получение шрифта и т.д., кроме наложения). Но не работает применение формата к текущему символу (проверял через print). Решения проблемы не нашел.

Версии используемых библиотек:

click==8.1.8
keyboard==0.13.5
packaging==24.2
PyQt-builder==1.18.0
PyQt6==6.8.1
PyQt6-3D==6.8.0
PyQt6-3D-Qt6==6.8.2
PyQt6-Qt6==6.8.2
PyQt6_sip==13.10.0
python-dotenv==1.0.1
qt6-applications==6.5.0.2.3
qt6-tools==6.5.0.1.3
sip==6.10.0

Импорты:

from PyQt6.QtWidgets import QApplication, QTextEdit, QVBoxLayout, QWidget, QFontComboBox, QPushButton, QColorDialog, QToolBar, QSpinBox, QFileDialog, QInputDialog
from PyQt6.QtGui import QTextCharFormat, QColor, QTextCursor, QFont, QTextImageFormat, QImage
from PyQt6.QtCore import Qt

Функция находится в классе TextEditor(QWidget)


Ответы (0 шт):