Python 在Tkinter中获取默认字体

Python 在Tkinter中获取默认字体,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在运行Python 3.6,想知道是否有办法获得Tkinter使用的默认字体,更具体地说是Canvas对象在调用Canvas.create_text时使用的默认字体。来自文档: Tk 8.0自动将Courier、Helvetica和Time映射到所有平台上相应的本地姓氏 我找不到说明画布默认字体的文档。创建文本将是什么,但它应该是上面引用中列出的3种字体之一。idlelib/help.py有以下行: normalfont = self.findfont(['TkDefaultFont

我正在运行Python 3.6,想知道是否有办法获得Tkinter使用的默认字体,更具体地说是
Canvas
对象在调用
Canvas.create_text
时使用的默认字体。

来自文档:

Tk 8.0自动将Courier、Helvetica和Time映射到所有平台上相应的本地姓氏


我找不到说明画布默认字体的文档。创建文本将是什么,但它应该是上面引用中列出的3种字体之一。

idlelib/help.py
有以下行:

    normalfont = self.findfont(['TkDefaultFont', 'arial', 'helvetica'])
其中,
findfont
定义如下:

def findfont(self, names):
    "Return name of first font family derived from names."
    for name in names:
        if name.lower() in (x.lower() for x in tkfont.names(root=self)):
            font = tkfont.Font(name=name, exists=True, root=self)
            return font.actual()['family']
        elif name.lower() in (x.lower()
                              for x in tkfont.families(root=self)):
            return name
(这不是我写的。)


是字体函数上的最终文档

是的。用于在画布上创建文本对象的默认字体为“TkDefaultFont”

如果要修改该默认字体,可以使用
nametofont()
访问基础字体对象,然后对其进行操作:

from tkinter import font
def_font_obj = font.nametofont(def_font)
def_font_obj.config(...)
如果不想自定义默认字体,可以基于当前字体创建新的命名字体,然后使用

current_font = c.itemconfig(id, 'font')[-1] # or just c.itemcget(id, 'font')
new_named_font = font.Font(font=current_font).config(...)
然后将名为字体的新字体作为字体选项传递给任何小部件配置

current_font = c.itemconfig(id, 'font')[-1] # or just c.itemcget(id, 'font')
new_named_font = font.Font(font=current_font).config(...)