You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6/PyQt6中QTextEdit自动换行时实现缩进效果

实现QTextEdit自动换行行首缩进区分段落

要实现手动换行的新段落首行无缩进,自动换行的内容行首缩进的效果,无需用到QTextLayout,只需调整QTextBlockFormat的悬挂缩进参数即可——核心思路是给段落设置左侧边距,同时让首行反向偏移抵消这个边距,这样首行对齐左边界,后续自动换行的行则保持边距缩进。

修改后的代码

import sys
from PySide6.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
from PySide6.QtGui import QTextCursor, QTextBlockFormat

class Widget(QWidget):
    def __init__(self):
        super().__init__()
        self.text_edit = QTextEdit()
        v_layout = QVBoxLayout()
        v_layout.addWidget(self.text_edit)
        self.setLayout(v_layout)

        self.text_edit.setPlainText(
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
                "Fusce malesuada lacus nec sapien hendrerit mollis. Etiam " +
                "euismod consequat magna sed ornare. Donec dapibus aliquet " +
                "turpis eget gravida. Morbi porttitor orci pharetra magna " +
                "ultrices, vel facilisis mauris ullamcorper. Curabitur a " +
                "fringilla arcu. Mauris vulputate sodales blandit.\n" + 
                "Nam pellentesque volutpat est vitae ultrices. Nam at augue " +
                "quis massa porttitor suscipit et ac neque. \n" + 
                "Cras dolor risus, lobortis nec nisl nec, suscipit iaculis " +
                "tellus. Nulla non bibendum elit, ut gravida lacus. " + 
                "est modi necessitatibus. \n" + 
                "Hic rerum voluptas voluptatem. \n" + 
                "Ut expedita unde eum molestias voluptatem aut" +
                "dignissimos dolor. \n")

        cursor = QTextCursor(self.text_edit.document())
        cursor.select(QTextCursor.Document)
        fmt = QTextBlockFormat()
        # 设置段落左侧边距(自动换行后的行缩进量)
        fmt.setLeftMargin(40)
        # 设置首行反向偏移,抵消左侧边距,让首行对齐左边界
        fmt.setTextIndent(-40)
        cursor.mergeBlockFormat(fmt)

app = QApplication(sys.argv)
widget = Widget()
widget.show()
app.exec()

原理说明

  • setLeftMargin(40):给整个段落设置40像素的左侧边距,这会让段落内所有行都向右偏移40像素。
  • setTextIndent(-40):给段落首行设置负的缩进值,让首行向左偏移40像素,刚好抵消左侧边距,所以首行看起来和无缩进一样。
  • 这样一来,手动换行产生的新段落首行对齐左边界,而段落内自动换行的后续行则保持40像素的缩进,完美区分两种换行类型。

内容的提问来源于stack exchange,提问作者Cuissedemouche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:25:36