TKInter 字体的多种变体

Multiple variations of TKInter fonts

我正在努力更好地理解在 tkinterttk 中使用字体。

我的计划是有两种不同的标题样式,每种都有自己的字体大小。我使用 nametofont() 创建字体实例,然后以两种不同的样式设置大小:

labelFont = tkinter.font.nametofont('TkTextFont')
labelFont.config(weight='bold')

ttk.Style().configure("TLabel", font=labelFont, size=12)
ttk.Style().configure("heading.TLabel", font=labelFont, size=48)

然后将样式应用于标题:

heading = ttk.Label(root, text="Heading", style="heading.TLabel")
label = ttk.Label(root, text="Label", style="TLabel")   #   is style redundant?

不幸的是,我没有得到两种不同的尺寸,所以这显然是错误的方法。

我也试过这样的:

labelFont = tkinter.font.nametofont('TkTextFont')
headingFont = tkinter.font.nametofont('TkTextFont')
# etc

以为我会得到两个独立的字体实例,但它们似乎是同一个实例。如果它们是独立的,我可以使用 configure() 给它们每个人自己的字体大小。

我采用这种方法是因为我想使用built-in命名字体,并使用变量来保持一致性。正确的做法是什么?

您需要在 Font 的不同实例上使用 .config(size=...):

labelFont = tkinter.font.nametofont('TkTextFont')
labelFont.config(weight='bold', size=12)

# create a clone of labelFont using Font.copy()
headingFont = labelFont.copy()
headingFont.config(size=48)

s = ttk.Style()
s.configure('TLabel', font=labelFont) # apply to all instance of ttk.Label
s.configure('heading.TLabel', font=headingFont, size=96)

heading = ttk.Label(root, text='Heading', style='heading.TLabel')
label = ttk.Label(root, text='Label') # style='TLabel' is not necessary