如何获取PyQtGraph中GLTextItem的尺寸?
如何获取PyQtGraph中GLTextItem的尺寸?
我之前也碰到过类似的头疼问题,PyQtGraph的GLTextItem确实没有直接获取尺寸的API——毕竟它是基于OpenGL即时渲染的,不像普通Qt文本控件那样有现成的尺寸属性可以调用。不过有两个实用的办法能解决这个定位不准的问题:
一、用QFontMetrics提前计算(推荐)
GLTextItem渲染文本用的是Qt的QFont体系,所以我们可以借助QFontMetrics这个工具,提前算出文本的宽高。关键是要保证你用来计算的字体和GLTextItem的字体完全一致,这样结果才准确。
给你举个贴合你场景的代码例子:
from PyQt5.QtGui import QFont, QFontMetrics import pyqtgraph.opengl as gl # 创建角度标签的GLTextItem,假设你用了自定义字体 angle_text = "90°" text_item = gl.GLTextItem(text=angle_text, font=QFont("微软雅黑", 10)) # 获取这个item的字体,用来计算尺寸 target_font = text_item.font() metrics = QFontMetrics(target_font) # 拿到文本的实际宽高 text_width = metrics.horizontalAdvance(angle_text) text_height = metrics.height()
拿到宽高后,你就可以调整位置了。比如你想让文本的中心对准雷达图的某个角度刻度点,因为GLTextItem的锚点是左下角,那设置位置时就可以把x坐标减去一半宽度:
# 假设你原本的刻度点坐标是(angle_x, angle_y, 0) text_item.setPos(angle_x - text_width/2, angle_y, 0)
这样调整后,文本就能完美对齐到你想要的位置了。
二、复杂场景结合投影矩阵(少见需求)
如果你的3D视图有大量缩放、旋转变换,或者给GLTextItem做了OpenGL层面的缩放,那QFontMetrics的结果可能需要结合视图的投影矩阵做转换。不过这种情况在雷达图的角度标签场景里几乎碰不到,所以优先用第一种方法就好。
总的来说,核心思路就是借助Qt的字体度量工具间接获取尺寸——毕竟GLTextItem本身不会提前计算并保存文本的布局信息,只能靠我们自己提前算好再调整位置。
备注:内容来源于stack exchange,提问作者Schwefelsaeure
相关产品推荐
相关产品推荐

