Граница для метки 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()