python – 如何更改窗口小部件的字体样式,而不知道窗口小部件的字体家庭/大小?

有没有办法改变Tkinter小部件的字体样式,而不知道窗口小部件的字体系列和字体大小?

使用案例:我们使用标准Tkinter小部件(标签,条目,文本等)创建我们的UI。在我们的应用程序运行时,我们可能希望使用.config()方法动态地将这些小部件的字体样式更改为粗体和/或斜体。不幸的是,似乎没有办法指定一个字体规范,而没有指定字体的家庭和大小。

以下是我们想要做的示例,但这些示例都不工作:

widget.config(font='bold')

要么

widget.config(font=( None, None, 'bold' ))
最佳答案
有一个比使用.config()更改你的应用程序字体更好的方法,特别是如果你的目标是改变一组窗口小部件(或所有窗口小部件)的字体。

Tk的一个真正伟大的功能是“命名字体”的概念。命名字体的美丽是,如果更新字体,使用该字体的所有窗口小部件将自动更新。因此,配置您的窗口小部件一次使用这些自定义字体,然后更改属性是微不足道的。

这里有一个简单的例子:

try:
    import Tkinter as tk
    import tkFont
#    import ttk  # not used here
except ImportError:  # Python 3
    import tkinter as tk
    import tkinter.font as tkFont
#    import tkinter.ttk as ttk  # not used here

class App:
    def __init__(self):
        root=tk.Tk()
        # create a custom font
        self.customFont = tkFont.Font(family="Helvetica", size=12)

        # create a couple widgets that use that font
        buttonframe = tk.Frame()
        label = tk.Label(root, text="Hello, world", font=self.customFont)
        text = tk.Text(root, width=20, height=2, font=self.customFont)
        buttonframe.pack(side="top", fill="x")
        label.pack()
        text.pack()
        text.insert("end","press +/- buttons to change\nfont size")

        # create buttons to adjust the font
        bigger = tk.Button(root, text="+", command=self.OnBigger)
        smaller = tk.Button(root, text="-", command=self.OnSmaller)
        bigger.pack(in_=buttonframe, side="left")
        smaller.pack(in_=buttonframe, side="left")

        root.mainloop()

    def OnBigger(self):
        '''Make the font 2 points bigger'''
        size = self.customFont['size']
        self.customFont.configure(size=size+2)

    def OnSmaller(self):
        '''Make the font 2 points smaller'''
        size = self.customFont['size']
        self.customFont.configure(size=size-2)

app=App()

如果你不喜欢这种方法,或者你想使自定义字体基于默认字体,或者如果你只是改变一个或两个字体来表示状态,你可以使用font.actual获取实际大小给定widget的字体。例如:

import Tkinter as tk
import tkFont

root = tk.Tk()
label = tk.Label(root, text="Hello, world")
font = tkFont.Font(font=label['font'])
print font.actual()

当我运行上面的我得到以下输出:

{'family': 'Lucida Grande', 
 'weight': 'normal', 
 'slant': 'roman', 
 'overstrike': False, 
 'underline': False, 
 'size': 13}

转载注明原文:python – 如何更改窗口小部件的字体样式,而不知道窗口小部件的字体家庭/大小? - 代码日志