如何通过 auto py to exe 和 tkextrafont 使用自定义字体?

问题描述 投票:0回答:1

我正在尝试使用自动 py 到 exe 构建一个 .exe 文件。在我提供的 PyCharm 代码中工作正常并且字体显示正确,但是当我构建 exe 文件并运行它时,我收到此错误:

FileNotFoundError: [WinError 2]: 'C:\\Users\\test\\AppData\\Local\\Temp\\_MEI21562\\tkextrafont'

我该如何修复它,以便 myapp.exe 正确显示字体?

from tkinter import Tk, Label
from tkextrafont import Font

def resource_path(relative_path):

    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

root = Tk()

font_reg = Font(file=resource_path('./font/Manrope-Regular.ttf'), family='Manrope')

label = Label(text="test",font=('Manrope', 30, 'bold'))
label.pack()

root.mainloop()

尝试更改路径,无论有没有resource_path函数,都不起作用。

python tkinter pyinstaller auto-py-to-exe
1个回答
0
投票

不确定您是否还需要这个,但我遇到了同样的问题并最终找到了解决方案。

问题

问题是

tkextrafont
库里面有一些二进制文件。如果你查看你的 venv,你会发现类似这样的东西

venv\Lib\site-packages\tkextrafont:

  __init__.py
  extrafont.tcl
  fontnameinfo.tcl
  futmp.tcl
  libextrafont.dll
  pkgIndex.tcl

pyinstaller
似乎没有复制这个文件夹(我不知道为什么,但临时构建文件夹中没有
tkextrafont
文件夹)。因此,
tkextrafont
无法
cd
到此文件夹并运行二进制文件。

解决方案

您可以使用

--add-data
参数手动将此文件夹添加到 .exe。像这样的东西

pyinstaller --onefile --add-data TKEXTRAFONT_PATH;tkextrafont main.py

,其中 TKEXTRAFONT_PATH 是

tkextrafont
文件夹的路径,例如
C:\\Users\\name\\projects\\test\\venv\\Lib\\site-packages\\tkextrafont
(您也可以将此 tkextrafont 文件夹复制到某处以获得更短、更持久的路径)。

© www.soinside.com 2019 - 2024. All rights reserved.