在每个系统中保留字体
retain the font in every system
在 pyqt5 应用程序中,我在 qtdesigner
中使用 css 为标签应用了字体
font: 57 68px "IntelOne Display Medium";
border: None;
我在我的 windows 机器上使用 pyinstaller 和 运行 构建 exe 它工作正常,但是当我 运行 在不同机器上使用相同的 exe 时,字体不同,不是加粗
我的机器:
不同的机器:
如何在所有系统中保留字体?
您必须确保字体可用,因此解决方案是使用 QFontDatabase 加载它。
要使其可用,有 2 个选项:
- 使用 --add-data:
├── 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 中将 :
更改为 ;
。
- 使用资源:
├── 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()
在 pyqt5 应用程序中,我在 qtdesigner
中使用 css 为标签应用了字体font: 57 68px "IntelOne Display Medium";
border: None;
我在我的 windows 机器上使用 pyinstaller 和 运行 构建 exe 它工作正常,但是当我 运行 在不同机器上使用相同的 exe 时,字体不同,不是加粗
我的机器:
不同的机器:
如何在所有系统中保留字体?
您必须确保字体可用,因此解决方案是使用 QFontDatabase 加载它。
要使其可用,有 2 个选项:
- 使用 --add-data:
├── 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 中将 :
更改为 ;
。
- 使用资源:
├── 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()