首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将Tkinter小部件设置为单间隔、平台无关的字体?

如何将Tkinter小部件设置为单间隔、平台无关的字体?
EN

Stack Overflow用户
提问于 2018-02-11 13:01:23
回答 1查看 10.1K关注 0票数 11

在标准字体一节中说是这里

特别是对于或多或少的标准用户界面元素,每个平台都定义了应该使用的特定字体。Tk将其中许多内容封装到始终可用的一组标准字体中,当然,标准小部件使用这些字体。这有助于抽象出平台之间的差异。

然后在预定义字体列表中有:

TkFixedFont A standard fixed-width font.

这也与我在这里可以找到的在Tkinter中选择单间距、平台无关字体的标准方法相对应,例如,在这个答案中已经说明了这一点。

唉,当我尝试自己做这件事时,就像下面的简单代码一样:

代码语言:javascript
运行
复制
import tkinter as tk
from tkinter import ttk

root = tk.Tk()
frame = ttk.Frame(root)
style = ttk.Style()
style.configure("Fixed.TButton", font=("TkFixedFont", 16))

button = ttk.Button(text="Some monospaced text, hopefully", style="Fixed.TButton")
frame.grid()
button.grid(sticky="news")
button.configure(text="I don't quite like this font.")

我得到的是:

在我看来,这看起来不像单一空间,所以我检查了Tkinter在我的平台上到底将TkFixedFont转换成了什么:

代码语言:javascript
运行
复制
from tkinter import font
font.nametofont("TkFixedFont").actual()

答案是:

代码语言:javascript
运行
复制
{'family': 'DejaVu Sans Mono', 'size': 9, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}

那么DejaVu Sans Mono是什么样的呢?

上面引用的Tkdocs.com教程还有一个关于命名字体的部分,在这里它说:

保证支持名称CourierTimesHelvetica (并映射到适当的单空间、serif或sans-serif字体)。

所以我试着:

代码语言:javascript
运行
复制
style.configure("Courier.TButton", font=("Courier", 16))
button.configure(style="Courier.TButton")

现在我终于得到了一个单一的结果:

诚然,我的平台选择的是Courier New而不是DejaVu Sans Mono作为标准的单频字体,但这至少是有意义的,对吧?但TkFixedFont不应该只是起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-04 21:21:36

标准字体(包括TkFixedFont)只能作为普通字符串,而不是元组。也就是说,font='TkFixedFont'工作,而font=('TkFixedFont',) (请注意括号和逗号)不能工作。

这似乎是一般情况。我和Tkinter.Buttonttk.Style都试过了。

就风格而言,这意味着:

代码语言:javascript
运行
复制
import Tkinter
import ttk

# will use the default (non-monospaced) font
broken = ttk.Style()
broken.configure('Broken.TButton', font=('TkFixedFont', 16))

# will work but use Courier or something resembling it
courier = ttk.Style()
courier.configure('Courier.TButton', font=('Courier', 16))

# will work nicely and use the system default monospace font
fixed = ttk.Style()
fixed.configure('Fixed.TButton', font='TkFixedFont')

测试如何在Linux和Windows上使用Python2.7。

底线是,只要去掉"TkFixedFont"周围的括号,问题中的代码就会运行得很好。

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

https://stackoverflow.com/questions/48731746

复制
相关文章

相似问题

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