Конфигурирование позиции текста в 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()
