web-dev-qa-db-fra.com

Bordure pour tkinter Label

Pas vraiment pertinent mais je suis en train de construire un calendrier et j'ai beaucoup de widgets Label, et donc ça aura l'air beaucoup plus joli si j'avais des frontières pour eux!

J'ai vu que vous pouvez le faire pour d'autres widgets tels que Button, Entry et Text.

Code minimal:

from tkinter import *

root = Tk()

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

L1.pack()
L2.pack()

J'ai essayé de mettre

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

à l'intérieur du widget, mais toujours le même résultat.

 example pic tkinter

Est-ce même possible de faire? Je vous remercie!

10
Pax Vobiscum

Si vous voulez une bordure, l'option est borderwidth. Vous pouvez également choisir le relief de la bordure: "flat", "raised", "sunken", "ridge", "solid" et "groove".

Par exemple:

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

Remarque: "ridge" et "groove" nécessitent au moins deux pixels de largeur pour un rendu correct.

 examples of tkinter borders

32
Bryan Oakley

@Pax Vobiscum - Une façon de faire est de prendre un widget et de jeter un cadre avec une couleur derrière le widget. Tkinter pour toute son utilité peut être un peu primitif dans son ensemble de fonctionnalités. Une option bordercolor serait logique pour n'importe quelle boîte à outils de widgets, mais il ne semble pas en être une.

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)

Un exemple utilisant cette méthode pourrait être de créer une table:

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)
0
Xofo