首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修改Tkinter中的默认字体?

如何修改Tkinter中的默认字体?
EN

Stack Overflow用户
提问于 2013-03-17 15:39:43
回答 2查看 51.7K关注 0票数 37

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

如果可能的话,我想在一行中定义所有小部件使用的默认字体。这一行只修改条目中使用的字体,即ComboBox:

代码语言:javascript
运行
复制
root.option_add("*Font", "courier 10")

但不包括复选框的标签。

我发现预定义的字体"TkDefaultFont“存在,但我无法更改它的配置:

代码语言:javascript
运行
复制
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}

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

我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-17 16:58:02

Tkinter有几种内置字体-- TkDefaultFontTkTextFontTkFixedFont等等。这些都被称为“命名字体”。它们非常强大--改变其中之一,使用它们的所有小部件也会发生变化。

若要更改这些字体之一,请获取该字体的句柄,然后使用configure方法进行更改。例如,要将TkDefaultFont的大小更改为48,可以这样做:

代码语言:javascript
运行
复制
default_font = tkFont.nametofont("TkDefaultFont")
default_font.configure(size=48)

就这样。您不必做任何其他事情--所有使用TkDefaultFont的东西都会立即注意到变化。

在你的问题中,你暗示你想要TkDefaultFont字体被所有的东西所使用。要做到这一点,您可以使用option_add,如您所示:

代码语言:javascript
运行
复制
root.option_add("*Font", default_font)

但是,请注意,option_add只影响在调用option_add之后创建的小部件,因此在创建任何其他小部件之前需要这样做。

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

票数 54
EN

Stack Overflow用户

发布于 2020-02-09 21:07:35

警告:虽然这个问题涉及Py2.7,但我的答案是Py3。概念是完全相同的。但是,不使用tkinter.font,而是使用tkFont来实现Py2等。

如果要更改默认字体或任何命名字体,则必须通过nametofont()访问字体对象。

代码语言:javascript
运行
复制
def_font = tkinter.font.nametofont("TkDefaultFont")

然后配置返回的对象,如

代码语言:javascript
运行
复制
def_font.config(size=24)

当你打电话的时候

代码语言:javascript
运行
复制
myfont = tkinter.font.Font(font="TkDefaultFont")

实际上,您正在创建一个具有相同属性的新命名字体。为了帮助展示这一点:

str(def_font)给出"TkDefaultFont",并且

str(myfont)给出"font1“

哎呀..。忘了提到..。你问你做错了什么。其中一件事是在您的第二行,您创建,然后配置一个新的命名字体,但您没有捕获它到一个变量。如果你捕获了它,你可以使用这个名为字体的字体。但是,这仍然不会修改默认的名为字体。您必须像上面解释的那样使用nametofont()来完成这一任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15462647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档