【问题标题】:How to use custom font path in tkinter? Windows ONLY如何在 tkinter 中使用自定义字体路径?仅限 Windows
【发布时间】:2020-05-31 13:48:20
【问题描述】:

我想使用与我的 python 程序在同一目录中的字体,但实际上 python 会在 windows 字体文件夹中搜索它,我应该如何修复它?

(我想给我的程序提供字体路径或导入字体以在我的标签中使用它)

例如: 在这里,如果字体文件夹中的字体myfont 我的程序可以工作,但如果不是,它将以默认字体显示。

from tkinter import * root = Tk() my_lab = Label(root,font=("myfont" ,10 )).place(x=1,y=1)

我用过font=(f"path/to/font",10),但它不起作用

【问题讨论】:

  • 这能回答你的问题吗? Truly custom font in Tkinter
  • 实际上它只是说要使用照片,并且因为我的 gui 程序彼此之间有很多窗口,所以我不能在其中使用照片,除非我用我不知道如何和实际上的类编写它我不想让它可编辑,你知道如果有人改变照片我的程序会完全改变
  • “只是说要用照片代替”:你也看过最后一条评论了吗?
  • fontload("path\\to\\font.tff"):应该是.ttf。尝试参数的变体private=False, enumerable=True
  • 是的,现在它的工作,非常感谢你,我应该如何接受你的评论以显示给其他人作为答案?

标签: python python-3.x windows tkinter fonts


【解决方案1】:

问题:如何在 tkinter 中使用自定义字体路径? 仅限 Windows

参考


把函数改成Python 3:

def loadfont(fontpath, private=True, enumerable=False):
    ...

    # For 3.x, you have to convert the isinstance checks to bytes and str

    if isinstance(fontpath, bytes):
        pathbuf = create_string_buffer(fontpath)
        AddFontResourceEx = windll.gdi32.AddFontResourceExA

    elif isinstance(fontpath, str):
        pathbuf = create_unicode_buffer(fontpath)
        AddFontResourceEx = windll.gdi32.AddFontResourceExW
    ...

尝试使用参数private=Falseenumerable=True 的变体,并确保您输入的字体名称正确。

运行loadfont(...)函数,如:

loadfont("path//to//font.ttf", private=False, enumerable=True)

【讨论】:

  • 是的,实际上它已经解决并正确显示,但文本大小发生了变化。它与编译有关吗?不编译也没关系
  • “它与编译有关吗?”编译版本表现不同是常见的问题。它们经常丢失相关文件并回退到默认值或完全失败。您是否仔细检查过,loadfont(... 打包和使用的 .ttf 文件是否完全相同?请编辑答案以显示您使用的 loadfont(... 参数。
  • 是的,它们是相同的,它们在我的电脑上也可以,但是当我在另一台电脑上运行我的程序时,就会出现问题。我应该在你编辑的答案中编辑什么
猜你喜欢
  • 1970-01-01
  • 2016-06-10
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
相关资源
最近更新 更多