如何在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
相关产品推荐
相关产品推荐

