

新闻资讯
技术学院在 pyside6 中,`qpainter.drawtext()` 默认不支持自动换行;需正确组合 `qt.alignmentflag` 与 `qt.textflag.textwordwrap`(而非 `qtextoption.wrapmode`)才能使长文本在指定矩形内按词换行并居中对齐。
要在 QPainter 绘图过程中实现文本在矩形区域内的自动换行(Word Wrap),关键在于正确使用 Qt.TextFlag.TextWordWrap 标志 —— 它是专为 drawText() 设计的换行控制标识,不可与 QTextOption.WrapMode 混用(后者属于 QTextOption 类,用于 QTextDocument 或富文本布局场景,直接传入 drawText() 会导致类型错误或崩溃)。
✅ 正确写法如下(适配你的原始代码):
from PySide6.QtCore import Qt, QRect
from PySide6.QtGui import QPainter
# 假设 painter 已初始化,self.* 为已有属性
rectangle = QRect(self.startX, self.startY, int(self.Width), int(self.Length))
painter.fillRect(rectangle, self.colorList[i])
painter.drawText(
rectangle,
Qt.AlignmentFlag.A
lignCenter | Qt.TextFlag.TextWordWrap, # ✅ 正确组合:对齐 + 换行标志
self.AssiName[i] # 注意:问题中变量名疑似笔误,应为 self.AssiName[i] 而非 self.AssName[i]
)
painter.drawRect(rectangle)⚠️ 注意事项:
总结:只需将原错误写法
Qt.AlignmentFlag.AlignCenter | QTextOption.WrapMode.WordWrap
替换为
Qt.AlignmentFlag.AlignCenter | Qt.TextFlag.TextWordWrap,
即可安全、高效地启用居中+自动换行功能,完美适配动态尺寸矩形的批量绘制场景。