web-dev-qa-db-fra.com

Comment supprimer la bordure gris clair autour de mon widget Canvas?

J'ai joué avec le widget Tkinter Canvas afin de voir si je pouvais créer des widgets esthétiques, et j'ai quelques questions.

Tout d'abord, pourquoi y a-t-il bordure gris clair autour de mon widget Canvas, et comment puis-je m'en débarrasser?

Deuxièmement, pourquoi la position la plus à gauche dans le canevas (2,2)? Il semble que ce devrait être (0,0).

Mon script actuel:

from Tkinter import *

master = Tk()
master.configure(bg='black')
master.wm_attributes("-topmost", 1)

w = Canvas(master, width=150, height=40, bd=0,relief='ridge',)
w.pack()

color = 100
x0 = 2
y0 = 2
x1 = 151
y1 = 2

while y0 < 20 :
    r = color
    g = color
    b = color
    rgb = r, g, b
    Hex = '#%02x%02x%02x' % rgb
    w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1)
    color = color - 2
    y0 = y0 + 1
    y1 = y1 + 1

color = 10

while y0 < 40 :
    r = color
    g = color
    b = color
    rgb = r, g, b
    Hex = '#%02x%02x%02x' % rgb
    w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1)
    color = color + 4
    y0 = y0 + 1
    y1 = y1 + 1

mainloop()
36
rectangletangle

Section 6.8 Pourquoi le canevas ne semble-t-il pas commencer à 0,0? du Tk Usage FAQ décrit le phénomène.

J'ai pu éliminer l'artefact frontalier en modifiant légèrement la source affichée ...

Change ça:

w = Canvas(master, width=150, height=40, bd=0, relief='ridge')
w.pack()

à:

w = Canvas(master, width=150, height=40, bd=0, highlightthickness=0, relief='ridge')
w.pack()

et ça:

x0 = 2
y0 = 2
x1 = 151
y1 = 2

à:

x0 = 0
y0 = 0
x1 = 150
y1 = 0

Chose intéressante, l'attribut "borderwidth" N'a pas fait de différence, mais je l'ai laissé dans la FAQ [~ # ~] [~ # ~].

L'exécution de w.config() immédiatement après l'instruction d'initialisation Canvas a montré que les valeurs par défaut étaient 2 pour highlightthickness et 0 pour border width.

48
T.P.

La réponse courte est que le canevas a deux composants qui affectent les bords: la bordure (attribut borderwidth) et l'anneau de surbrillance (attribut highlightthickness).

Si vous avez une largeur de bordure de zéro et une épaisseur de surbrillance de zéro, les coordonnées du canevas commenceront à 0,0. Sinon, ces deux composants du canevas empiètent sur l'espace de coordonnées.

Ce que je fais le plus souvent, c'est définir ces attributs sur zéro. Ensuite, si je veux réellement une bordure, je mettrai cette toile dans un cadre et je lui donnerai une bordure.

12
Bryan Oakley