我试图得到一个文本的大小,所以我可以相应地缩放它,以适应一个盒子。但不幸的是,QFontMetrics.width()似乎提供了错误的输出。
这里有一个代码,它绘制文本,并使用来自QFontMetrics的值来绘制一个应该类似大小的rect。但事实并非如此。正如您在下面的图片中所看到的,来自QFontMetrics (绘制的rect)的值大约是我正在绘制的值的一半。不幸的是,我不能把它乘以2,因为取决于文本,因子可能是1.85或1.95。
from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QPainter, QTextDocument, QFont, QFontMetrics
from PyQt5.QtCore import QRect, Qt, QRectF
import sys
font = QFont("times",10)
fm = QFontMetrics(font)
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.InitWindow()
def InitWindow(self):
self.setWindowIcon(QtGui.QIcon("icon.png"))
self.show()
def paintEvent(self, event):
painter = QPainter(self)
painter.setFont(font)
sText = 'Hello World!'
painter.drawText(0,100, sText)
pixelsWide = fm.width(sText)
pixelsHigh = fm.height()
painter.drawRect(0, 100, pixelsWide, pixelsHigh)
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

发布于 2022-10-10 04:10:25
正如QFont文档中所解释的那样
注意,QGuiApplication实例必须存在才能使用QFont。
这显然包括使用QFont作为QFontMetrics构造函数。
原因很简单,而且很明显: QApplication 必须知道UI环境,以便正确计算字体度量,这可能取决于它们将要使用的画图设备。考虑字体缩放或High设置的常见情况:没有QGuiApplication,Qt绝对没有了解这些方面的意义,QFont不应该(也不能)在其构造函数中处理这个问题,因为QFontMetrics不会这样做。
将QFont和QFontMetrics构造函数移到其他地方,这可能发生在创建QApplication之后和实际使用之前的任何时刻。
https://stackoverflow.com/questions/74010039
复制相似问题