我正在用Tkinter开发Python2.7中的GUI,我有一个恼人的问题。
如果可能的话,我想在一行中定义所有小部件使用的默认字体。这一行只修改条目中使用的字体,即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}
(没有错误,但没有改变!)
我做错什么了?
发布于 2013-03-17 16:58:02
Tkinter有几种内置字体-- TkDefaultFont
、TkTextFont
、TkFixedFont
等等。这些都被称为“命名字体”。它们非常强大--改变其中之一,使用它们的所有小部件也会发生变化。
若要更改这些字体之一,请获取该字体的句柄,然后使用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")
。
发布于 2020-02-09 21:07:35
警告:虽然这个问题涉及Py2.7,但我的答案是Py3。概念是完全相同的。但是,不使用tkinter.font
,而是使用tkFont
来实现Py2等。
如果要更改默认字体或任何命名字体,则必须通过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()
来完成这一任务。
https://stackoverflow.com/questions/15462647
复制相似问题