在每个系统中保留字体

2024-09-27 21:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在pyqt5应用程序中,我在qtdesigner中使用css为标签应用了字体

font: 57 68px "IntelOne Display Medium";
border: None;   

我使用pyinstaller构建exe并在我的windows机器上运行它工作正常,但是当我在不同的机器上运行相同的exe时,字体不同,不是粗体

我的机器:

enter image description here

不同的机器:

enter image description here

如何在所有系统中保留字体


Tags: 机器none应用程序display字体标签execss
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:57

您必须确保字体可用,因此解决方案是使用QFontDatabase加载字体

要使其可用,有两个选项:

  • 使用添加数据:
├── fonts
└── main.py
import os
import sys
from pathlib import Path

from PyQt5.QtCore import QDir
from PyQt5.QtGui import QFontDatabase
from PyQt5.QtWidgets import QApplication


DIR_APPLICATION = (
    Path(sys.executable).parent
    if getattr(sys, "frozen", False)
    else Path(__file__).resolve().parent
)


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


def main():

    app = QApplication(sys.argv)

    # LOAD FONTS
    font_dir = DIR_APPLICATION / "fonts"
    families = load_fonts_from_dir(os.fspath(font_dir))
    print(families)

    # FIXME

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

命令:

pyinstaller  add-data "fonts/*:fonts"  onefile main.py 

注意:在windows中,将:更改为;

  • 使用qresource:
├── fonts
├── main.py
├── resource.qrc
└── resource_rc.py

resource.qrc

<RCC>
    <qresource prefix="/">
        <file>fonts/foo.ttf</file>
        <file>fonts/bar.ttf</file>
        <file>fonts/baz.ttf</file>
    </qresource>
</RCC>
pyrcc5 resource.qrc -o resource_rc.py 
import os
import sys

from PyQt5.QtCore import QDir
from PyQt5.QtGui import QFontDatabase
from PyQt5.QtWidgets import QApplication

import resource_rc


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


def main():

    app = QApplication(sys.argv)

    # LOAD FONTS
    font_dir = ":/fonts"
    families = load_fonts_from_dir(os.fspath(font_dir))
    print(families)

    # FIXME

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

相关问题 更多 >

    热门问题