Существует гораздо лучший способ, чем использовать .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
, чтобы получить фактический размер шрифта для данного виджета. Например:
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}