如何使用 QFont 选择另一种字体?

Posted

技术标签:

【中文标题】如何使用 QFont 选择另一种字体?【英文标题】:How to select another type of font with QFont? 【发布时间】:2021-07-25 18:35:21 【问题描述】:

我正在尝试使用 PyQt5 为我的应用程序分配不同类型的文本字体,但我不知道如何将不同类型的文本字体分配给标准字体,例如在我的应用程序中我只能分配它“Roboto”,但是如果我想更改为 Roboto-MediumItalic,我不知道如何为其指定字体类型,我是 python 和 pyqt5 的新手

QFontDatabase.addApplicationFont("Static/fonts/Roboto-Light.ttf")
label2.setFont(QFont('Roboto',12))

文件夹

【问题讨论】:

【参考方案1】:

您必须使用样式和 QFontDatabase 才能使用Roboto-MediumItalic。也可以通过QFont设置斜体粗细样式。

import os
import sys
from pathlib import Path

from PyQt5.QtCore import Qt, QDir
from PyQt5.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import QApplication, QLabel

CURRENT_DIRECTORY = Path(__file__).resolve().parent


def load_fonts_from_dir(directory):
    families = set()
    for fi in QDir(directory).entryInfoList(["*.ttf"]):
        _id = QFontDatabase.addApplicationFont(fi.absoluteFilePath())
        families |= set(QFontDatabase.applicationFontFamilies(_id))
    return families


def main():

    app = QApplication(sys.argv)

    font_dir = CURRENT_DIRECTORY / "Static" / "fonts"
    families = load_fonts_from_dir(os.fspath(font_dir))
    print(families)

    db = QFontDatabase()
    styles = db.styles("Roboto")
    print(styles)

    font = db.font("Roboto", "Medium Italic", 12)

    # OR
    # font = QFont("Roboto", pointSize=12, weight=QFont.Medium, italic=True)

    label = QLabel(alignment=Qt.AlignCenter)
    label.setFont(font)
    label.setText("Hello world!!")
    label.resize(640, 480)
    label.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

【讨论】:

以上是关于如何使用 QFont 选择另一种字体?的主要内容,如果未能解决你的问题,请参考以下文章

根据字体句柄 (HFONT) 获取字体文件名

Qt 中的字体设置(QFont)

Qt 中如何获取系统默认字体大小?

Qt QFont 字距调整 - 不影响/字距调整字体

QPainter.drawText 丑陋的字体渲染

Qt的pointSize和pixelSize,qt字体大小自适应