获取Tkinter中的默认字体

时间:2017-06-10 22:52:01

标签: python python-3.x tkinter

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

3 个答案:

答案 0 :(得分:0)

来自文件here

  

Tk 8.0会自动将Courier,Helvetica和Times映射到所有平台上相应的本地姓氏。

我找不到文档说明canvas.create_text的默认字体是什么,但它应该是上面引用中列出的3种之一。

答案 1 :(得分:0)

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

(我没有写这个。)

https://www.tcl.tk/man/tcl8.6/TkCmd/font.htm是字体功能的终极文档。

答案 2 :(得分:-1)

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

<x:>

如果要修改该默认字体,则可以使用from tkinter import * r = Tk() c = Canvas(r) c.pack() id = c.create_text(10, 10, text='c') def_font = c.itemconfig(id, 'font')[-2] # [-2] is default, [-1] is current print(def_font, c.itemconfig(id)) # to see all the config info 来访问基础字体对象,然后对其进行操作:

nametofont()

如果您不想自定义默认字体,则可以基于当前字体创建一个新的命名字体,然后使用

进行修改。
from tkinter import font
def_font_obj = font.nametofont(def_font)
def_font_obj.config(...)

然后将new_named_font作为字体选项传递给任何小部件配置。