44 votes

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

Je me suis amusé avec le Tkinter. Canvas afin de voir si je pouvais créer des widgets esthétiques, et j'ai quelques questions.

Premièrement, pourquoi y a-t-il un bordure gris clair autour de mon widget Canvas, et comment m'en débarrasser ?

Deuxièmement, pourquoi la position la plus haute à gauche dans le Canvas est-elle (2,2) ? Il semble qu'elle 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()

79voto

T.P. Points 2705

Section 6.8 Pourquoi le canevas ne semble-t-il pas commencer à 0,0 ? de la FAQ sur l'utilisation de Tk décrit le phénomène.

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

Changez ç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 ceci :

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

à :

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

Il est intéressant de noter que le "borderwidth" n'a pas fait de différence, mais je l'ai laissé dans l'attribut FAQ .

Running w.config() immédiatement après le Canvas La déclaration d'initialisation a montré que les valeurs par défaut étaient 2 pour highlightthickness y 0 pour border width .

18voto

Bryan Oakley Points 63365

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

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

Ce que je fais le plus souvent, c'est de définir ces attributs comme suit zéro . Ensuite, si je veux vraiment une bordure, je placerai cette toile dans un cadre et je donnerai une bordure au cadre.

0voto

Manish Points 41

Si l'ajout de l'épaisseur de surbrillance dans l'instance de classe du canevas provoque une erreur (c'est ce que j'ai fait récemment). Ajoutez-le dans la configuration comme indiqué ci-dessous :

canvas=Canvas(width=206,height=260, bg=YELLOW)
canvas.config(highlightthickness=0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X