如何在 PyQt5 的 QTextEdit 中设置块的标题?

问题描述 投票:0回答:0

我正在尝试将所见即所得的 HTML 编辑器集成到我的 PyQT5 应用程序中。我有一个带有组合框的工具栏,该组合框具有多种块样式和一个 QTextEdit。这是我现在实现标题样式的代码(我只添加了相关部分):


self.text_edit.cursorPositionChanged.connect(self.check_newline)
self.bg_color_picker_action.triggered.connect(self.bg_pick_color)

    def toggle_bold(self):
        format = QTextCharFormat()
        format.setFontWeight(QFont.Bold if self.bold_action.isChecked() else QFont.Normal)
        cursor = self.text_edit.textCursor()
        cursor.mergeCharFormat(format)
        self.text_edit.mergeCurrentCharFormat(format)
        self.text_edit.setFocus()
        self.text_edit.document().setModified(True)

    # Check if a new line has started, and if so make the style a paragraph
    def check_newline(self):
        cursor = self.text_edit.textCursor()
        if cursor.positionInBlock() == 0:
            fmt = cursor.blockFormat()
            fmt.setHeadingLevel(0)
            self.heading_combo.setCurrentIndex(0)
            cursor.mergeBlockFormat(fmt)
            self.text_edit.textCursor().mergeBlockFormat(fmt)

    def apply_heading(self):
        cursor = self.text_edit.textCursor()
        fmt = cursor.blockFormat()
        if self.heading_combo.currentText() == "Heading 1":
            fmt.setHeadingLevel(1)
        elif self.heading_combo.currentText() == "Heading 2":
            fmt.setHeadingLevel(2)
        elif self.heading_combo.currentText() == "Heading 3":
            fmt.setHeadingLevel(3)
        elif self.heading_combo.currentText() == "Heading 4":
            fmt.setHeadingLevel(4)
        elif self.heading_combo.currentText() == "Heading 5":
            fmt.setHeadingLevel(5)
        elif self.heading_combo.currentText() == "Heading 6":
            fmt.setHeadingLevel(1)
        elif self.heading_combo.currentText() == "Paragraph":
            fmt.setHeadingLevel(0)

        self.text_edit.document().setModified(True)

        cursor.mergeBlockFormat(fmt)
        self.text_edit.textCursor().mergeBlockFormat(fmt)

        print(self.text_edit.toHtml())

每次更改标题样式时我都会打印 html 以帮助我进行调试,它显示了对 html 的正确更改,并带有正确的标签,即

<h1>
<h2>
<p>
等。但是,除非我将它保存到文件中,否则不会反映在 QTextEdit 中,关闭程序然后再次打开文件。将 QTextEdit 的 html 设置为它自己的 html (
self.text_edit.setHtml(self.text_edit.toHtml())
) 没有帮助,并且还会导致撤消历史记录被重置。其他更改,如粗体、斜体和下划线,会立即显示出来。

我试过使用:

1.

self.text_edit.setHtml(self.text_edit.toHtml())

  1. self.text_edit.update()
    self.text_edit.repaint

  2.  new_fragment = QTextDocumentFragment(old_doc)
     new_html = new_fragment.toHtml()```
    
python pyqt pyqt5 qt5
© www.soinside.com 2019 - 2024. All rights reserved.