Modify the default font in Python Tkinter

匿名 (未验证) 提交于 2019-12-03 01:57:01

问题:

I'm working on a GUI in Python2.7, with Tkinter, and I have an annoying problem.

I would like to define the default font used by all the widgets, if possible in one line. This line modify only the font used in Entry, or ComboBox:

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

but not the label of checkbox by example.

I found that a predefined font exist "TkDefaultFont" but I'm unable to change its configuration:

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()

return :

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

(no errors, but nothing change !!)

What I'm doing wrong ?

回答1:

Tkinter has several built-in fonts -- TkDefaultFont, TkTextFont, TkFixedFont, etc. These are all what are called "named fonts". They are remarkably powerful -- change one of these and all widgets that use them will change as well.

To change one of these fonts, get a handle to it and then use the configure method to change. For example, to change the size of TkDefaultFont to 48 you would do this:

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

That's it. You don't have to do anything else -- everything that uses TkDefaultFont will instantly notice the change.

In your question you imply you want TkDefaultFont font to be used by everything. To do that you can use option_add as you've shown:

root.option_add("*Font", default_font)

Note, however, that option_add only affects widgets created after you've called option_add, so you need to do it before creating any other widgets.

Also note that you can give the font name to option_add if you don't want to bother with getting the font instance first (ie: root.option_add("*Font", "TkDefaultFont")).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!