Виджет Label в библиотеке Tkinter: основы и продвинутые возможности

Раздел: GUI -> Tkinter

Введение в виджет Label

В библиотеке Tkinter виджет Label (метка) предназначен для отображения статического или динамически изменяемого текста, а также изображений. Это один из самых простых и часто используемых элементов графического интерфейса. Label не принимает ввода от пользователя, но может служить для вывода информации, подписей к другим виджетам или декоративных целей.

Основное создание Label

Простейшая метка создаётся командой Label(parent, text='...'). Рассмотрим базовый пример.

import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text='Привет, мир!')
label.pack()
root.mainloop()

Python self tkinter (использование self в tkinter)

После запуска окно отобразит надпись. Метод pack() размещает виджет в родительском контейнере. Для более точного позиционирования можно использовать place() или grid().

Цель: получить метку с текстом по умолчанию. Подходит для вывода простых сообщений, заголовков, подписей.

Типичные ошибки

  • Забыть вызвать mainloop() - окно не появится.
  • Родительский виджет (root) не создан - ошибка.
  • Текст содержит символы, требующие экранирования (например, &).

Как изменить текст уже созданной метки?

Для динамического обновления текста используется метод config(text='новый текст') или присвоение через словарь label['text'].

label.config(text='Новое сообщение')
# или
label['text'] = 'Ещё одно сообщение'

Tkinter python buttons (кнопки в tkinter (англ.))

Также можно изменить текст привязкой к переменной StringVar (см. вариант с переменной).

Как изменить шрифт, цвет текста и фона метки?

Атрибуты font, fg (цвет текста) и bg (цвет фона) задаются при создании или через config().

label = tk.Label(root, text='Цветной текст',
                 font=('Arial', 16, 'bold'),
                 fg='red', bg='yellow')
label.pack()

Python tkinter label (метка (label) в tkinter)

Проблема: если цвет фона не меняется, проверьте, не используете ли вы тему ttk (в ttk.Label стили работают иначе).

Как настроить перенос текста на несколько строк?

По умолчанию метка не переносит текст. Используйте параметр wraplength – ширину в пикселях, после которой текст переносится, и justify для выравнивания.

long_text = 'Это очень длинный текст, который должен быть перенесён на следующую строку'
label = tk.Label(root, text=long_text, wraplength=150, justify='left')
label.pack()

Python tkinter entry (поле ввода (entry) в tkinter)

Случай: для подсказок или описаний, которые не умещаются в строку.

Ошибки

Если перенос не работает, убедитесь, что wraplength меньше ширины окна. При использовании pack() с опцией expand=True ширина может меняться.

Как поместить изображение в Label?

Метка может отображать изображение (только форматы, поддерживаемые PhotoImage: PNG, GIF, PPM/PGM). Используйте параметр image.

img = tk.PhotoImage(file='image.png')
label = tk.Label(root, image=img)
label.pack()
# Важно: переменная img должна жить, пока отображается метка, иначе изображение исчезнет

Python tkinter приложение (создание приложения на tkinter)

Можно комбинировать текст и изображение через параметр compound (top, bottom, left, right, center).

label = tk.Label(root, text='Котик', image=img, compound='left')

Python tkinter programs (примеры программ на tkinter)

Как привязать метку к переменной для автоматического обновления?

Используйте StringVar() и параметр textvariable. При изменении переменной текст обновляется автоматически.

var = tk.StringVar()
var.set('Начальное значение')
label = tk.Label(root, textvariable=var)
label.pack()
# Чтобы изменить текст:
var.set('Новое значение')

Python tkinter line (рисование линий в tkinter)

Цель: синхронизация текста с другими частями программы (например, счётчик, таймер).

Как добавить рамку вокруг метки?

Параметр bd (borderwidth) задаёт толщину рамки, relief – стиль (flat, raised, sunken, groove, ridge).

label = tk.Label(root, text='Рамка', bd=2, relief='groove')
label.pack()

Python tkinter окно (создание окна в tkinter)

Как выровнять текст внутри метки?

Параметр anchor задаёт положение текста (n, ne, e, se, s, sw, w, nw, center). Например, anchor='w' прижимает текст к левому краю.

label = tk.Label(root, text='Слева', anchor='w', width=20)
label.pack()

Python tkinter таблицы (создание таблиц в tkinter python)

Как создать метку с гиперссылкой?

По умолчанию Label не кликабелен. Эмулируем ссылку с помощью события и изменения цвета/курсора.

def open_link(event):
    import webbrowser
    webbrowser.open('https://example.com')

link = tk.Label(root, text='Нажми меня', fg='blue', cursor='hand2')
link.pack()
link.bind('', open_link)

Python text get (метод get() для текста в python (например, из tkinter))

Проблемы

Внешний вид может отличаться от настоящей ссылки. Для лучшего эффекта используйте underline=True (только для первой буквы) или ttk.Label со стилем.

Как добавить всплывающую подсказку (Tooltip) к Label?

Стандартного метода нет, но легко реализовать через события и .

def tip_enter(event):
    tip = tk.Toplevel(root)
    tip.wm_overrideredirect(True)
    tip.geometry('+{}+{}'.format(event.x_root+10, event.y_root+10))
    label_tip = tk.Label(tip, text='Подсказка', bg='lightyellow')
    label_tip.pack()
    event.widget.tip = tip

def tip_leave(event):
    if hasattr(event.widget, 'tip'):
        event.widget.tip.destroy()

label = tk.Label(root, text='Наведи мышь')
label.pack()
label.bind('', tip_enter)
label.bind('', tip_leave)

Этот код создаёт небольшое окно с текстом при наведении.

Заключение первой части

Виджет Label в Tkinter – гибкий и простой инструмент для отображения информации. Основные параметры (text, font, fg, bg, image, wraplength) покрывают большинство задач. Расширенные возможности (события, переменные, рамки) позволяют адаптировать метку под конкретные нужды. В следующей части рассмотрим нетривиальные примеры использования.

- Python приложение для windows (создание окна с помощью tkinter)

Расширенные примеры с Label

1. Динамическое отображение времени

Создаём метку, которая каждую секунду обновляется, показывая текущее время.

Пример
import tkinter as tk
import time

def update_time():
    current = time.strftime('%H:%M:%S')
    clock.config(text=current)
    root.after(1000, update_time)

root = tk.Tk()
clock = tk.Label(root, font=('Arial', 24), fg='green')
clock.pack()
update_time()
root.mainloop()
Окно с часами, обновляющимися каждую секунду.

Метод after() запускает функцию через заданное количество миллисекунд рекурсивно.

2. Метка с изображением и прозрачным фоном

Формат PNG поддерживает прозрачность, которую Tkinter корректно отображает (если не установлен сплошной фон).

Пример
import tkinter as tk

root = tk.Tk()
# Загрузка PNG с прозрачным фоном
img = tk.PhotoImage(file='transparent.png')
label = tk.Label(root, image=img, bg='lightblue')
label.pack()
root.mainloop()

Результат: изображение с прозрачными областями, через которые виден голубой фон окна.

3. Смена шрифта и анимация цвета через config

Меняется цвет текста через заданный интервал.

Пример
import tkinter as tk

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']

def change_color(idx=0):
    label.config(fg=colors[idx])
    root.after(500, change_color, (idx+1) % len(colors))

root = tk.Tk()
label = tk.Label(root, text='Радужный текст', font=('Arial', 20, 'bold'))
label.pack()
change_color()
root.mainloop()
Цвет текста плавно перебирает радужную палитру.

4. Label с тенью за счёт двух перекрывающихся меток

Создаётся дублирующая метка со смещением и чёрным цветом.

Пример
import tkinter as tk

root = tk.Tk()
# Тень
shadow = tk.Label(root, text='Тень', font=('Arial', 30), fg='gray')
shadow.place(x=12, y=12)
# Основной текст
main_label = tk.Label(root, text='Тень', font=('Arial', 30), fg='black')
main_label.place(x=10, y=10)
root.geometry('200x100')
root.mainloop()
Визуальный эффект тени под текстом.

5. Метка с прокручиваемым текстом (Scrollable Label)

Имитация прокрутки через обновление текста. Пример вывода длинного лога.

Пример
import tkinter as tk

class ScrollLabel(tk.Label):
    def __init__(self, parent, **kwargs):
        super().__init__(parent, **kwargs)
        self._text = ''
        self._index = 0

    def scroll(self, step=1):
        if self._text:
            self._index = (self._index + step) % len(self._text)
            self.config(text=self._text[self._index:] + ' ' + self._text[:self._index])
        self.after(200, self.scroll, step)

root = tk.Tk()
sl = ScrollLabel(root, text='Привет, мир!          ', font=('Courier', 14))
sl.pack()
sl._text = sl.cget('text')
sl.scroll(1)
root.mainloop()
Текст бегущей строкой прокручивается вправо.

6. Использование ttk.Label с темой и стилем

ttk.Label поддерживает темы оформления. Настройка стиля через ttk.Style.

Пример
import tkinter as tk
from tkinter import ttk

root = tk.Tk()
style = ttk.Style()
style.theme_use('clam')  # или 'alt', 'classic', 'default'
style.configure('My.TLabel', foreground='navy', background='lightgray',
                font=('Helvetica', 12), padding=10)

label = ttk.Label(root, text='Стилизованная метка', style='My.TLabel')
label.pack(pady=20)
root.mainloop()
Метка с кастомизированным внешним видом в соответствии с темой.

7. Label с событием двойного клика для копирования текста в буфер обмена

Пример
import tkinter as tk

def copy_text(event):
    widget = event.widget
    text = widget.cget('text')
    root.clipboard_clear()
    root.clipboard_append(text)
    root.update()  # обязательно для сохранения в буфере

root = tk.Tk()
label = tk.Label(root, text='Дважды кликни, чтобы скопировать', fg='blue', cursor='hand2')
label.pack()
label.bind('', copy_text)
root.mainloop()
При двойном клике текст копируется в системный буфер обмена.

8. Многострочная метка с разными шрифтами (через Text)

Хотя сам Label не поддерживает разметку, можно использовать виджет Text с отключённым редактированием, но это уже не чистая метка. Пример для полноты:

Пример
import tkinter as tk

root = tk.Tk()
text = tk.Text(root, height=4, wrap='word')
text.insert('1.0', 'Жирный текст', 'bold')
text.insert('2.0', '\nКурсив', 'italic')
text.tag_config('bold', font=('Arial', 12, 'bold'))
text.tag_config('italic', font=('Arial', 12, 'italic'))
text.config(state='disabled')
text.pack()
root.mainloop()

Результат: нередактируемое текстовое поле с разным форматированием.

Метка (Label) в Tkinter - comments

En
Python tkinter label (python)