Граница для метки tkinter

Не очень актуально, но я создаю календарь, и у меня есть много виджетов Label, и поэтому будет намного лучше, если у меня есть для них границы!

Я видел, что вы можете сделать это для других виджетов, таких как Button, Entry и Text.

Минимальный код:

from tkinter import *

root = Tk()

L1 = Label(root, text="This")
L2 = Label(root, text="That")

L1.pack()
L2.pack()

Я попытался настроить

highlightthickness=4
highlightcolor="black"
highlightbackground="black"
borderwidth=4

внутри виджета, но результат тот же.

example pic tkinter

Это вообще возможно сделать? Спасибо!

Ответ 1

Если вы хотите рамку, выберите вариант borderwidth. Вы также можете выбрать рельеф границы: "flat", "raised", "sunken", "ridge", "solid" и "groove".

Например:

l1 = Label(root, text="This", borderwidth=2, relief="groove")

Примечание. Для правильной визуализации "ridge" и "groove" требуется как минимум два пикселя ширины

examples of tkinter borders

Ответ 2

@Pax Vobiscum - способ сделать это - взять виджет и бросить рамку с цветом позади виджета. Tkinter при всей его полезности может быть немного примитивным в своем наборе функций. Параметр bordercolor был бы логичен для любого набора инструментов виджета, но, похоже, его нет.

from Tkinter import *

root = Tk()
topframe = Frame(root, width = 300, height = 900)
topframe.pack()

frame = Frame(root, width = 202, height = 32, highlightbackground="black", highlightcolor="black", highlightthickness=1, bd=0)
l = Entry(frame, borderwidth=0, relief="flat", highlightcolor="white")
l.place(width=200, height=30)
frame.pack
frame.pack()
frame.place(x = 50, y = 30)

Примером использования этого метода может быть создание таблицы:

from Tkinter import *

def EntryBox(root_frame, w, h):
    boxframe = Frame(root_frame, width = w+2, height= h+2, highlightbackground="black", highlightcolor="black", highlightthickness=1, bd=0)
    l = Entry(boxframe, borderwidth=0, relief="flat", highlightcolor="white")
    l.place(width=w, height=h)
    l.pack()
    boxframe.pack()
    return boxframe

root = Tk()
frame = Frame(root, width = 1800, height = 1800)
frame.pack()

labels = []

for i in range(16):
    for j in range(16):
        box = EntryBox(frame, 40, 30)
        box.place(x = 50 + i*100, y = 30 + j*30 , width = 100, height = 30)
        labels.append(box)

Ответ 3

Резюме:

Lbl1 = Label(relief=GROOVE).pack()