修改Python Tkinter中的默认字体

问题描述

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仅影响调用 创建的窗口小部件option_add,因此您需要在创建任何其他窗口小部件之前进行此操作。

另外请注意,option_add如果您不想打扰先获取字体实例,也可以给它加上字体名称(即:)root.option_add("*Font", "TkDefaultFont")

解决方法

我正在使用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}

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

我做错了什么?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”