Изменение размера шрифта для нескольких меток в tkinter - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть группа из 10 ярлыков в tkinter, для которой я хочу изменить размер шрифта. Я знаю, что существует возможность изменить размер шрифта для каждой отдельной метки, но мне интересно посмотреть, есть ли элегантное решение для изменения размера шрифта выбранной группы меток. Прямо сейчас я просто жестко закодировал размер во всех них.

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Используйте ttk виджеты. У них есть поддержка «тем» (или «стилей»).

Вы можете создать один стиль и применить его ко всем меткам. (Пример основан на документации )

style = ttk.Style()
style.configure(
    "BW.TLabel",
    foreground="black",
    background="white",
    font="Helvetica",
    fontsize=12
)

l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")
0 голосов
/ 13 апреля 2020

Вы можете определить опции как словарь и использовать этот словарь с каждым виджетом

import tkinter as tk

root = tk.Tk()

options = {'font': (None, 20)}

l = tk.Label(root, text="Label 1", **options)
l.pack()

l = tk.Label(root, text="Label 2", **options)
l.pack()

l = tk.Label(root, text="Label 3", **options)
l.pack()

root.mainloop()

Если вы будете сохранять метки в списке, вы можете использовать for -l oop для их изменения

import tkinter as tk

root = tk.Tk()

all_labels = []

l = tk.Label(root, text="Label 1")
l.pack()
all_labels.append(l)

l = tk.Label(root, text="Label 2")
l.pack()
all_labels.append(l)

l = tk.Label(root, text="Label 3")
l.pack()
all_labels.append(l)

for l in all_labels:
    l['font'] = (None, 20)

root.mainloop()

Каждый виджет хранит информацию о дочерних виджетах, и вы можете использовать ее, чтобы найти все метки

import tkinter as tk

root = tk.Tk()

l = tk.Label(root, text="Label 1")
l.pack()

l = tk.Label(root, text="Label 2")
l.pack()

l = tk.Label(root, text="Label 3")
l.pack()

for widget in root.winfo_children():
    if isinstance(widget, tk.Label):
        widget['font'] = (None, 20)

root.mainloop()

В ответе Ролана Смита вы можете увидеть, как использовать tkinter.ttk

0 голосов
/ 13 апреля 2020

Здесь элегантный oneliner, который устанавливает шрифт для всех меток в root (главном окне) на размер шрифта 30

[wid.config(font=(None,30)) for wid in root.winfo_children() if isinstance(wid, Label) ]

во многих лайнерах
Вы также можете перебрать все виджеты в главном окне, отфильтровать все Label с и затем изменить их свойства с помощью al oop

# Iterate through all widgets of your main window / root
for wid in root.winfo_children():
    # check if it's a label
    if isinstance(wid, Label):
        wid.config(font=(None,30))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...