簡體   English   中英

當我在 PyQt5 中使用 QFontMetrics 時,我得到的數字與我使用 drawText 繪制的文本大小不匹配

[英]When I use QFontMetrics in PyQt5, the numbers I get don't match the size of the text that I'm drawing with drawText

我正在嘗試獲取文本的大小,因此我可以相應地縮放它以適合一個盒子。 但不幸的是, QFontMetrics.width() 似乎給出了錯誤的輸出。

這是一個繪制文本的代碼,並使用 QFontMetrics 中的值繪制一個大小應該相似的矩形。 但事實並非如此。 如下圖所示,QFontMetrics 中的值(繪制為矩形)大約是我繪制的值的一半。 不幸的是,我不能只將它乘以 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())

在此處輸入圖像描述

QFont 文檔中所述:

請注意,在使用 QFont 之前,必須存在 QGuiApplication 實例。

這顯然包括使用 QFont 作為 QFontMetrics 構造函數。

原因很簡單,也很明顯:QApplication必須知道 UI 環境才能正確計算字體指標,這可能取決於它們將被繪制的繪圖設備。 考慮字體縮放或高 DPI 設置的常見情況:如果沒有 QGuiApplication,Qt 絕對沒有了解這些方面的意義,QFont 顯然不應該(也不能)在其構造函數中處理這些問題,因為 QFontMetrics 不會。

將 QFont 和 QFontMetrics 構造函數移到其他地方,這可能是在 QApplication 創建之后和實際使用之前的任何時刻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM