#python-3.x #tkinter #fonts #ttk
Вопрос:
Я пытаюсь лучше понять использование шрифтов в tkinter
и ttk
.
Мой план состоит в том, чтобы иметь два разных стиля для заголовков, каждый со своим собственным размером шрифта. Я использовал 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()
дать каждому из них свой собственный размер шрифта.
Я выбрал этот подход, потому что хотел использовать встроенный именованный шрифт и использовать переменные для поддержания согласованности. Каков правильный подход к этому?
Ответ №1:
Вам нужно использовать .config(size=...)
на разных экземплярах Font
:
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
Комментарии:
1. То, что исправило это для меня, — это выражение
labelFont.copy()
лица . Я должен был уже знать, что мне следовало бы сделать клон объекта шрифта. Если вы будете рады добавить это к своему ответу, я могу его принять. Спасибо