首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在QFontMetrics中使用PyQt5时,我得到的数字与我用drawText绘制的文本的大小不匹配

当我在QFontMetrics中使用PyQt5时,我得到的数字与我用drawText绘制的文本的大小不匹配
EN

Stack Overflow用户
提问于 2022-10-10 03:46:38
回答 1查看 11关注 0票数 0

我试图得到一个文本的大小,所以我可以相应地缩放它,以适应一个盒子。但不幸的是,QFontMetrics.width()似乎提供了错误的输出。

这里有一个代码,它绘制文本,并使用来自QFontMetrics的值来绘制一个应该类似大小的rect。但事实并非如此。正如您在下面的图片中所看到的,来自QFontMetrics (绘制的rect)的值大约是我正在绘制的值的一半。不幸的是,我不能把它乘以2,因为取决于文本,因子可能是1.85或1.95。

代码语言:javascript
复制
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())

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 04:10:25

正如QFont文档中所解释的那样

注意,QGuiApplication实例必须存在才能使用QFont。

这显然包括使用QFont作为QFontMetrics构造函数。

原因很简单,而且很明显: QApplication 必须知道UI环境,以便正确计算字体度量,这可能取决于它们将要使用的画图设备。考虑字体缩放或High设置的常见情况:没有QGuiApplication,Qt绝对没有了解这些方面的意义,QFont不应该(也不能)在其构造函数中处理这个问题,因为QFontMetrics不会这样做。

将QFont和QFontMetrics构造函数移到其他地方,这可能发生在创建QApplication之后和实际使用之前的任何时刻。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74010039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档