我正在使用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}
(没有错误,但没有任何改变!)
我做错了什么?
Tkinter的有几个内置字体- ,TkDefaultFont,TkTextFont,TkFixedFont等等,这些都是所谓的“命名的字体”。它们非常强大- 更改其中之一,使用它们的所有小部件也将更改。
TkDefaultFont
TkTextFont
TkFixedFont
要更改这些字体之一,请获取它的句柄,然后使用该configure方法进行更改。例如,要将大小更改TkDefaultFont为48,可以执行以下操作:
configure
default_font = tkFont.nametofont("TkDefaultFont") default_font.configure(size=48)
而已。您无需执行其他任何操作-使用的所有内容TkDefaultFont都会立即注意到更改。
在您的问题中,您暗示您希望TkDefaultFont所有内容都使用字体。为此,您可以option_add按照显示的方式使用:
option_add
root.option_add("*Font", default_font)
但是请注意,这option_add仅影响调用 后 创建的窗口小部件option_add,因此您需要在创建任何其他窗口小部件之前进行此操作。
另外请注意,option_add如果您不想打扰先获取字体实例,也可以给它加上字体名称(即:)root.option_add("*Font", "TkDefaultFont")。
root.option_add("*Font", "TkDefaultFont")