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

如何在PySide6中从QPainter.drawText获取boundingRect?

在PySide6中获取QPainter.drawText的边界矩形

PySide6里QPainter.drawText确实没有C版中用于输出boundingRect的重载(Python不支持C式的引用输出参数),且该方法始终返回None。要获取文本绘制的边界矩形,有两种可靠方式:

1. 调用QPainter的boundingRect方法提前计算

在绘制文本前,先用QPainter.boundingRect()计算文本的边界矩形,该方法的参数与drawText对应,返回的矩形就是绘制时会用到的范围,和C++版drawText输出的boundingRect完全一致。示例代码:

from PySide6.QtGui import QPainter, QRectF, Qt
from PySide6.QtWidgets import QWidget

class CustomWidget(QWidget):
    def paintEvent(self, event):
        painter = QPainter(self)
        target_text = "测试PySide6文本绘制"
        
        # 计算文本边界矩形(指定绘制区域、对齐方式和文本)
        text_rect = painter.boundingRect(QRectF(0, 0, 300, 60), Qt.AlignHCenter | Qt.AlignVCenter, target_text)
        
        # 绘制文本
        painter.drawText(text_rect, Qt.AlignHCenter | Qt.AlignVCenter, target_text)
        
        # 可选:绘制边界矩形可视化查看范围
        painter.drawRect(text_rect)

2. 使用QFontMetrics计算边界

如果不需要结合QPainter的当前状态(比如临时修改的字体、变换矩阵等),可以直接用QFontMetrics计算文本边界:

from PySide6.QtGui import QFontMetrics, QFont, Qt
from PySide6.QtCore import QRectF

current_font = QFont("Arial", 12)
metrics = QFontMetrics(current_font)
target_text = "测试文本"

# 计算无约束的文本边界
basic_rect = metrics.boundingRect(target_text)

# 或者指定约束矩形和对齐方式
constrained_rect = metrics.boundingRect(QRectF(0, 0, 300, 60), Qt.AlignCenter, target_text)

注意:如果QPainter已经修改了字体(比如调用painter.setFont()),优先用QPainter的boundingRect方法,它会自动适配当前画家的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:43:24