修改Python Tkinter中的默认字体

eri*_*icc 20 python tkinter python-2.7

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

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

root.option_add("*Font", "courier 10")
Run Code Online (Sandbox Code Playgroud)

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

我发现预定义的字体存在"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()
Run Code Online (Sandbox Code Playgroud)

回报:

{'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}

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

我做错了什么?

Bry*_*ley 35

Tkinter的有几个内置字体- ,TkDefaultFont,TkTextFont,TkFixedFont等等,这些都是所谓的"命名的字体".它们非常强大 - 改变其中一个,所有使用它们的小部件也会改变.

要更改其中一种字体,请获取它的句柄,然后使用该configure方法进行更改.例如,要将大小更改TkDefaultFont为48,您可以这样做:

default_font = tkFont.nametofont("TkDefaultFont")
default_font.configure(size=48)
Run Code Online (Sandbox Code Playgroud)

而已.您无需做任何其他事情 - 使用的所有内容TkDefaultFont都会立即发现变化.

在您的问题中,您暗示您希望TkDefaultFont所有内容都使用字体.要做到这一点,您可以使用option_add如您所示:

root.option_add("*Font", default_font)
Run Code Online (Sandbox Code Playgroud)

但请注意,这option_add只会影响您调用创建的小部件option_add,因此您需要在创建任何其他小部件之前执行此操作.

另请注意,option_add如果您不想首先获取字体实例(即:),则可以给出字体名称root.option_add("*Font", "TkDefaultFont").

  • 以前从不知道 `nametofont` 方法 - 感谢您提到它!我觉得 Tkinter 的主要问题与其说是库的问题(尽管它肯定有其怪癖),不如说是其中有多少似乎完全没有记录。有一个短暂的提及“tkFont”存在于文档中,但它从未说明它包含的内容或它是如何工作的。 (2认同)
  • 最好在这个答案的第一个块代码中添加 ```import tkinter.font as tkFont``` 。 (2认同)
  • @Billy:您将需要其他小部件来使用不同的字体对象。它可以具有相同的属性,但需要是不同的字体对象。 (2认同)