fonts - PySimpleGUI:字体渲染问题
问题描述
我在我的开发机器上使用字体,但是当我将应用程序捆绑为 exe 并将其部署到另一台没有安装该字体的机器上时,字体渲染将变为默认值。有没有办法可以将字体与 exe 捆绑在一起并让 PySimpleGUI 使用它而不是尝试在系统中找到字体(这意味着需要先安装它)?有什么解决方法吗?
import PySimpleGUI as sg
sg.set_options(font=['Inder',10])
解决方案
您可以使用库pyglet
添加字体文件,并使用选项--add-data <SRC;DEST or SRC:DEST>
来PyInstaller
捆绑字体文件。
要添加到可执行文件的其他非二进制文件或文件夹。路径分隔符是特定于平台的
os.pathsep
(;
在 Windows 和:
大多数 unix 系统上)被使用。此选项可以多次使用。
演示代码
import pyglet
import PySimpleGUI as sg
# pyglet.font.add_file(r".\MerryChristmasFlake.ttf")
# pyglet.font.add_file(r".\MerryChristmasStar.ttf")
sg.theme("DarkBlue3")
font1 = ("Merry Christmas Flake", 40)
font2 = ("Merry Christmas Star", 40)
layout = [
[sg.Text("Merry Christmas Flake", font=font1)],
[sg.Text("Merry Christmas Star", font=font2)],
]
window = sg.Window('Title', layout, finalize=True)
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
print(event, values)
window.close()
在未标记的两行注释之后,
注意:从https://www.1001freefonts.com/d/17982/merry-christmas.zip下载字体文件,并将这两个字体文件放在与主脚本相同的路径下。
推荐阅读
- android - 调用 myAdapter.notifyDataSetChanged 后视图未更新
- binary - 我必须使用 Fortran 90 将 ASCII 和非 ASCII 字符的输入文件转换为二进制向量
- javascript - 如何修复 setTimeout/requestAnimationFrame 准确性
- javascript - 如何从元素数量由 Object.values 确定的对象生成数组?
- python - 即使经过 2000 次迭代,我的深度确定性策略梯度模型也没有学到任何东西
- python - 如何在两个数字之间生成对数随机值以进行超参数调整,即学习率?
- python - 如何在熊猫数据帧的每一行上并行运行一个函数
- fortran - 从相同的代码库构建多个可执行文件
- ruby-on-rails - 如何在 puma 杀死时打印线程回溯?
- node.js - 在单个 Azure Web 应用程序中使用 Angular 前端的 Node/Express 后端