You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中使用自定义Google Fonts字体失败求助

解决Tkinter中自定义Google Fonts字体不生效的问题

问题分析

你的代码核心问题大概率是字体名称使用错误——字体文件名(Exan-Regular.ttf)和字体内部注册的名称往往不一致,Tkinter调用时需要使用字体的内部名称而非文件名。此外,pyglet与Tkinter的字体识别机制偶尔会出现兼容性问题,也可能导致字体未正确加载。

可行解决方案

1. 确认字体的正确内部名称

首先用pyglet打印已加载的字体列表,找到目标字体的真实名称:

import pyglet
pyglet.font.add_file(r"C:\Users\Will\Downloads\Exan-Regular.ttf")
# 打印所有已识别的字体名称
for font_name in pyglet.font.have_fonts():
    print(font_name)

运行后,你会看到类似Exan的输出(这才是字体的真实名称,而非Exan-Regular)。

2. 修正代码使用正确字体名

将Label的font参数替换为真实字体名称:

import pyglet
import tkinter as tk

pyglet.font.add_file(r"C:\Users\Will\Downloads\Exan-Regular.ttf")

root = tk.Tk()
# 使用真实字体名称,比如"Exan"
MyLabel = tk.Label(root, text="test", font=('Exan', 25))
MyLabel.pack()
root.mainloop()

3. 备选方案:直接使用tkinter.font模块加载

若pyglet方案仍不生效,可尝试用Tkinter原生的tkinter.font模块加载字体:

import tkinter as tk
from tkinter import font

root = tk.Tk()

# 直接通过文件路径加载字体,指定family为自定义名称
custom_font = font.Font(
    family="Exan",
    size=25,
    file=r"C:\Users\Will\Downloads\Exan-Regular.ttf"
)

MyLabel = tk.Label(root, text="test", font=custom_font)
MyLabel.pack()

root.mainloop()

4. 终极备选:系统安装字体

如果以上方法都失效,可将Exan-Regular.ttf安装到系统字体库(Windows双击字体文件点击安装,Mac拖入字体册),之后直接用字体名称调用即可,无需额外加载代码:

import tkinter as tk

root = tk.Tk()
MyLabel = tk.Label(root, text="test", font=('Exan', 25))
MyLabel.pack()
root.mainloop()

额外注意事项

  • 确保字体文件路径正确,避免路径中包含特殊字符或空格(若有,建议用原始字符串r""包裹)。
  • 部分Linux系统需要刷新字体缓存才能识别新安装的字体,可执行命令fc-cache -fv。

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:12:42