Сохранение изменений, сделанных в QTextBrowser.TextCursor
Нужна функция bold для выделенного текста с последующим сохранением изменений в файл. merheCharFormat работает только для текущей сессии, попробовал ещё пару методов(в коде прокомментировал) - тоже не сработали.
Минимально воспроизводимый пример:
from PyQt5 import QtWidgets
import sys
from PyQt5.QtGui import QTextCharFormat, QFont
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
with open('text.txt', 'r', encoding='utf-8') as file:
self.text = file.read()
box = QtWidgets.QVBoxLayout()
self.textbrowser = QtWidgets.QTextBrowser()
self.textbrowser.setText(self.text)
self.textbrowser.setFixedSize(300, 300)
self.textbrowser.setReadOnly(False)
self.make_bold_button = QtWidgets.QPushButton('set bold')
self.make_bold_button.clicked.connect(self.set_bold_foo)
self.save_button = QtWidgets.QPushButton('save')
self.save_button.clicked.connect(self.save_text_foo)
box.addWidget(self.textbrowser)
box.addWidget(self.make_bold_button)
box.addWidget(self.save_button)
self.setLayout(box)
def set_bold_foo(self):
# этот отображается только в виджете, но не сохраняется
cursor = self.textbrowser.textCursor()
text_char_format = QTextCharFormat()
text_char_format.setFontWeight(QFont.Bold)
cursor.mergeCharFormat(text_char_format)
# ещё один не сработавший способ
cursor.insertHtml("<b>" + cursor.selectedText() + "</b>")
# и ещё один
cursor.selectedText().replace(cursor.selectedText(), f'<b>{cursor.selectedText()}</b>')
def save_text_foo(self):
with open('text.txt', 'w', encoding='utf-8') as file:
file.write(self.textbrowser.toPlainText())
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Window()
w.show()
app.exec_()
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Метод toPlainText не сохраняет форматирование, только текст, вам нужен метод toHtml:
def save_text_foo(self):
with open('text.txt', 'w', encoding='utf-8') as file:
file.write(self.textbrowser.toHtml())