修改Python Tkinter中的默认字体

时间:2013-03-17 15:39:43

标签: python python-2.7 tkinter

我正在使用Tkinter在Python2.7中使用GUI,我有一个恼人的问题。

我想定义所有小部件使用的默认字体,如果可能的话,在一行中。 此行仅修改Entry或ComboBox中使用的字体:

root.option_add("*Font", "courier 10")

但不是示例复选框的标签。

我发现预定义字体存在“TkDefaultFont”,但我无法更改其配置:

print tkFont.Font(font='TkDefaultFont').configure()
tkFont.Font(font='TkDefaultFont').config(family='Helvetica', size=20)
tk.TkDefaultFont = tkFont.Font(family="Helvetica",size=36,weight="bold")
print tkFont.Font(font='TkDefaultFont').configure()

返回:

  

{'family':'DejaVu Sans','weight':'normal','slant':'roman','overstrike':0,'underline':0,'size': - 12}   {'family':'DejaVu Sans','weight':'normal','slant':'roman','overstrike':0,'underline':0,'size': - 12}

(没有错误,但没有任何改变!)

我做错了什么?

2 个答案:

答案 0 :(得分:31)

Tkinter有几种内置字体 - TkDefaultFontTkTextFontTkFixedFont等。这些都是所谓的“命名字体”。它们非常强大 - 改变其中一个,所有使用它们的小部件也会改变。

要更改其中一种字体,请获取其中的句柄,然后使用configure方法进行更改。例如,要将TkDefaultFont的大小更改为48,您可以执行以下操作:

default_font = tkFont.nametofont("TkDefaultFont")
default_font.configure(size=48)

就是这样。您无需执行任何其他操作 - 使用TkDefaultFont的所有内容都会立即发现更改。

在您的问题中,您暗示您希望所有内容都使用TkDefaultFont字体。为此,您可以使用option_add,如您所示:

root.option_add("*Font", default_font)

但请注意,option_add仅影响调用{em> 之后创建的小部件,因此您需要在创建任何其他小部件之前执行此操作。

另请注意,如果您不想首先获取字体实例(例如:option_add),则可以将字体名称指定给option_add

答案 1 :(得分:1)

注意:尽管问题涉及Py2.7,但我的答案是针对Py3。概念完全相同。但是,人们会使用tkinter.font代替Py2等,而不是tkFont

如果要更改默认字体或任何命名的字体,则必须通过nametofont()访问字体对象:

def_font = tkinter.font.nametofont("TkDefaultFont")

然后配置返回的对象,例如

def_font.config(size=24)

致电时

myfont = tkinter.font.Font(font="TkDefaultFont")

您实际上是在创建具有相同属性的新命名字体。 为了帮助说明这一点:

str(def_font)给出“ TkDefaultFont”,并且

str(myfont)给出“ font1”

糟糕。.忘了...您问自己做错了什么。事情之一是在第二行中,创建并配置新的命名字体,但不要将其捕获到变量中。如果捕获了它,则可以使用该命名字体。但这仍然不会修改默认的命名字体。您必须如上所述使用nametofont()来完成该操作。