Конфигурирование позиции текста в Label

Столкнулся с необходимостью конфигурирования позиции текста в Label. Может кому-то будет полезно...


Ответы (2 шт):

Автор решения: biomotor

Результат:

введите сюда описание изображения

(P.S. смещение текста за счет kx и ky)

import tkinter as tk
from tkinter import RIGHT, CENTER

root = tk.Tk()

class ALabel():
    def __init__(self, parent, width=24, height=24, bg='#F2F2F2', kx=0, ky=0, *args, **kwargs):
        self.x = width
        self.y = height
        self.kx = kx
        self.ky = ky

        self.frame = tk.Frame(parent, width=width, height=height, bg=bg)
        self.label = tk.Label(self.frame, bg=bg, *args, **kwargs)

    def label_place(self):
        self.label.place(anchor=CENTER, x=self.x/2+self.kx, y=self.y/2+self.ky)

    def pack(self, *args, **kwargs):
        self.frame.pack(*args, **kwargs)
        self.label_place()

    def place(self, *args, **kwargs):
        self.frame.place(*args, **kwargs)
        self.label_place()

    def grid(self, *args, **kwargs):
        self.frame.grid(*args, **kwargs)
        self.label_place()

close = ALabel(root, text='?', font=('Lucida', 12), ky=-2)
close.pack(side=RIGHT)

root.mainloop()
→ Ссылка
Автор решения: insolor

Если отнаследоваться от tk.Frame, то не нужно будет создавать свои методы pack/place/grid. Метод place для метки достаточно вызывать один раз внутри метода __init__.

import tkinter as tk
from tkinter import RIGHT, CENTER

root = tk.Tk()


class ALabel(tk.Frame):
    def __init__(self, parent, width=24, height=24, bg='#F2F2F2', kx=0, ky=0, *args, **kwargs):
        super().__init__(parent, width=width, height=height, bg=bg)
        self.label = tk.Label(self, bg=bg, *args, **kwargs)
        self.label.place(anchor=CENTER, x=width/2+kx, y=height/2+ky)


close = ALabel(root, text='?', font=('Lucida', 12), ky=-2)
close.pack(side=RIGHT)

root.mainloop()
→ Ссылка