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

QGraphicsTextItem文本居中时的宽度自适应与HTML导出问题

解决方案

问题核心是固定setTextWidth导致的自动软换行(无法被toHtml捕获),要实现宽度自适应+文本居中,只需让setTextWidth始终匹配文本内容的理想宽度(不换行时的内容宽度),同时保留文本居中样式。

修改后的代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView, QGraphicsTextItem, QVBoxLayout, QWidget
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.central_widget = QWidget()
        self.layout = QVBoxLayout(self.central_widget)

        self.view = QGraphicsView()
        self.scene = QGraphicsScene(self)
        self.view.setScene(self.scene)
        self.view.setSceneRect(0, 0, 400, 300)

        self.editable_text = QGraphicsTextItem()
        self.editable_text.setTextInteractionFlags(Qt.TextEditorInteraction)
        self.editable_text.setFlags(QGraphicsTextItem.ItemIsSelectable | QGraphicsTextItem.ItemIsMovable | QGraphicsTextItem.ItemIsFocusable)

        # 保留文本居中的HTML样式
        self.editable_text.setHtml('<div style="text-align: center;">This is an example TEXT</div>')
        # 初始设置为文档理想宽度,避免自动换行
        self.editable_text.setTextWidth(self.editable_text.document().idealWidth())
        self.editable_text.setFont(QFont('Arial', 20))

        self.editable_text.document().contentsChange.connect(self.adjust_text_width)
        self.scene.addItem(self.editable_text)

        self.layout.addWidget(self.view)
        self.setCentralWidget(self.central_widget)

    def adjust_text_width(self):
        # 内容变化时,更新宽度为当前文档的理想宽度
        self.editable_text.setTextWidth(self.editable_text.document().idealWidth())


app = QApplication(sys.argv)
main_window = MyMainWindow()
main_window.resize(800, 500)
main_window.show()
sys.exit(app.exec_())

关键说明

  • document().idealWidth()会返回文本不换行时的实际宽度,以此设置setTextWidth,彻底避免自动软换行。
  • 保留HTML的text-align: center样式,确保文本内容在自身容器内居中显示。
  • 移除了不稳定的adjustSize()调用,因为setTextWidth匹配理想宽度后,item尺寸会自动适配内容。
  • 此时toHtml输出的内容仅包含用户手动输入的硬换行(如回车),完全满足写入ASS文件的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:23:11