Не работает применение формата к текущему символу в библиотеке 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)